NLTK 학습 노트 (3): NLTK 의 일부 도구

8321 단어 자연 언어
조건 주파수 분포, 정규 표현 식, 어간 추출 기, 병합 기 등 간단 한 도 구 를 요약 합 니 다.
조건 분포 주파수
는 많은 부분 에서 조건 분포 빈 도 를 사 용 했 고 nltk 는 두 가지 자주 사용 하 는 인 터 페 이 스 를 제공 했다. FreqDistConditionalFreqDist.뒤 에는 이 두 가지 방법, 특히 두 번 째 방법 이 많이 사용 된다.두 번 째 는 정의 에 더 부합 되 고 스마트 하 게 조건 을 찾 을 수 있 기 때문이다.그리고 그림 을 그린 라 이브 러 리 에 따라 예 쁜 그림 을 만 들 수 있 습 니 다.
간단하게 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 는 PorterStemmerLancasterStemmer 두 개의 단어 추출 기 를 제공 합 니 다. 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')

좋은 웹페이지 즐겨찾기