NLTK 학습 노트 (3): NLTK 의 일부 도구
8321 단어 자연 언어
조건 분포 주파수
는 많은 부분 에서 조건 분포 빈 도 를 사 용 했 고 nltk 는 두 가지 자주 사용 하 는 인 터 페 이 스 를 제공 했다.
FreqDist
와 ConditionalFreqDist
.뒤 에는 이 두 가지 방법, 특히 두 번 째 방법 이 많이 사용 된다.두 번 째 는 정의 에 더 부합 되 고 스마트 하 게 조건 을 찾 을 수 있 기 때문이다.그리고 그림 을 그린 라 이브 러 리 에 따라 예 쁜 그림 을 만 들 수 있 습 니 다.간단하게
FreqDist
함수 가 list 형식의 인 자 를 받 으 면 자동 으로 사전 을 만 들 고 해당 하 는 값 을 키 값 으로 생 성 합 니 다. value 는 요소 의 횟수 입 니 다.from nltk import *
tem = ['hello','world','hello','dear']
print(FreqDist(tem))
out:
FreqDist({'dear': 1, 'hello': 2, 'world': 1})
plot(TopK,cumulative=True)
와 tabulate()
를 통 해 해당 하 는 접 는 그림 과 표를 그 릴 수 있 습 니 다. (matplotlib 라 이브 러 리 를 설치 해 야 합 니 다)조건 분포
ConditionalFreqDist
하나의 짝 짓 기 링크 를 입력 하려 면 분 배 된 모든 이벤트 에 하나의 조건 을 연결 해 야 합 니 다. 입력 할 때 ( , )
와 유사 한 원 그룹 입 니 다.이후 의 업 무 는 nltk 에 맡 기 면 되 고 더 많은 정력 은 상부 논리 에 주목 할 수 있다.import nltk
from nltk.corpus import brown
cfd = nltk.ConditionalFreqDist((genre,word) for genre in brown.categories() for word in brown.words(categories=genre))
print("conditions are:",cfd.conditions()) # conditions
print(cfd['news'])
print(cfd['news']['could'])#
out:
conditions are: ['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction']
<FreqDist with 14394 samples and 100554 outcomes>
86
특히
plot()
와 tabulate()
에 대해 더 많은 매개 변수 선택 이 있 습 니 다. - conditions: 지정 조건 - samples: 교체 기 유형, 지정 한 수치 범위 - cumulative: True 로 설정 하면 누적 치 를 볼 수 있 습 니 다.cfd.tabulate(conditions=['news','romance'],samples=['could','can'])
cfd.tabulate(conditions=['news','romance'],samples=['could','can'],cumulative=True)
could can
news 86 93
romance 193 74
could can
news 86 179
romance 193 267
정규 표현 식 및 그 응용
정규 표현 식 이 자연 언어 에서 의 응용 을 기록 합 니 다.
입력 법 연상 알림 (9 궁 격 입력 법)
hole 과 golf 서열 (4653) 과 유사 한 단 어 를 찾 습 니 다.
import re
from nltk.corpus import words
wordlist = [w for w in words.words('en-basic') if w.islower()]
same = [w for w in wordlist if re.search(r'^[ghi][mno][jlk][def]$',w)]
print(same)
키보드 의 일부분 만 검색 하면 손가락 잰말놀이 다.예 를 들 어
^[ghijklmno]+$
등 이다.예 [^aeiouAEIOU]
는 모음 을 제외 한 모든 자모 와 일치 하 는 것 이다.문자 블록 찾기
두 개 또는 두 개 이상 의 모음 서열 을 찾 고 상대 빈 도 를 확인한다.
import nltk
wsj = sorted(set(nltk.corpus.treebank.words()))
fd = nltk.FreqDist(vs for word in wsj for vs in re.findall(r'[aeiou]{2,}',word))
fd.items()
그리고 자음 모음 서열 도 있다.
어간 을 찾다
애플 스 와 애플 의 비교 에서 애플 은 어간 이다.간단 한 스 크 립 트 를 써 서 어간 을 조회 하 다.
def stem(word):
for suffix in ['ing','ly','ed','ious','ies','ive','es','s','ment']:
if word.endswith(suffix):
return word[:-len(suffix)]
return None
정규 표현 식 을 사용 하려 면 한 줄 만 필요 합 니 다:
re.findall(r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)$',word)
어간 추출 기와 병합 기
nltk 는
PorterStemmer
과 LancasterStemmer
두 개의 단어 추출 기 를 제공 합 니 다. Porter 가 좋 습 니 다. lying 이라는 단 어 를 처리 할 수 있 습 니 다.porter = nltk.PorterStemmer()
print(porter.stem('lying'))
women 이라는 단 어 를 처리 하려 면 품사 병합 기 가 필요 합 니 다.
WordNetLemmatizer
wnl = nltk.WordNetLemmatizer()
print(wnl.lemmatize('women'))
어간 추출 기 를 이용 하여 색인 텍스트 구현 (concordance)
nltk. Index 라 는 함 수 를 이용 하여
nltk.Index((word , i) for (i,word) in enumerate(['a','b','a']))
class IndexText:
def __init__(self,stemmer,text):
self._text = text
self._stemmer = stemmer
self._index = nltk.Index((self._stem(word),i) for (i,word) in enumerate(text))
def _stem(self,word):
return self._stemmer.stem(word).lower()
def concordance(self,word,width =40):
key = self._stem(word)
wc = width/4 #words of context
for i in self._index[key]:
lcontext = ' '.join(self._text[int(i-wc):int(i)])
rcontext = ' '.join(self._text[int(i):int(i+wc)])
ldisplay = '%*s' % (width,lcontext[-width:])
rdisplay = '%-*s' % (width,rcontext[:width])
print(ldisplay,rdisplay)
porter = nltk.PorterStemmer()
grail = nltk.corpus.webtext.words('grail.txt')
text = IndexText(porter,grail)
text.concordance('lie')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
더 블 배열 트 리 깊이 들 어가 기 (Double - Array Trie)이 방법 을 구축 할 때 모든 단 어 를 메모리 에 넣 고 단어 에 있 는 모든 부모 노드 와 그 아래 의 하위 노드 를 각각 정렬 (보통 ASCII 코드 정렬) 하여 최초의 부모 노드 수량 과 몇 개의 서로 다른 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.