NLTK 학습 노트 (5): 어휘 분류 및 표기
품사 표시 기
이후 의 많은 일 들 이 표 시 된 어 휘 를 필요 로 한다.nltk 자체 영문 레이 블 러
pos_tag
import nltk
text = nltk.word_tokenize("And now for something compleyely difference")
print(text)
print(nltk.pos_tag(text))
레이 블 어 료 라 이브 러 리
표 시 된 식별 자 를 표시 합 니 다.
nltk.tag.str2tuple('word/ ')
text = "The/AT grand/JJ is/VBD ."
print([nltk.tag.str2tuple(t) for t in text.split()])
표 시 된 언어 자료 실 읽 기
nltk 언어 자료 실 ue 배꼽 은 통 일 된 인 터 페 이 스 를 제공 하 므 로 서로 다른 파일 형식 에 신경 쓰 지 않 아 도 된다.형식:
.tagged_word()/tagged_sents()
.인 자 는 categories 와 fields 를 지정 할 수 있 습 니 다.print(nltk.corpus.brown.tagged_words())
명사, 동사, 형용사 등
여기
from nltk.corpus import brown
word_tag = nltk.FreqDist(brown.tagged_words(categories="news"))
print([word+'/'+tag for (word,tag)in word_tag if tag.startswith('V')])
################ money #################################
wsj = brown.tagged_words(categories="news")
cfd = nltk.ConditionalFreqDist(wsj)
print(cfd['money'].keys())
모든 명사 유형 중 가장 빈번 한 명 사 를 찾 아 보 세 요.
def findtag(tag_prefix,tagged_text):
cfd = nltk.ConditionalFreqDist((tag,word) for (word,tag) in tagged_text if tag.startswith(tag_prefix))
return dict((tag,list(cfd[tag].keys())[:5]) for tag in cfd.conditions())# list
tagdict = findtag('NN',nltk.corpus.brown.tagged_words(categories="news"))
for tag in sorted(tagdict):
print(tag,tagdict[tag])
표 시 된 언어 자료 실 탐색
필요
nltk.bigrams()
와 nltk.trigrams()
는 각각 2 - gram 모델 과 3 - gram 모델 에 대응 해 야 한다.brown_tagged = brown.tagged_words(categories="learned")
tags = [b[1] for (a,b) in nltk.bigrams(brown_tagged) if a[0]=="often"]
fd = nltk.FreqDist(tags)
fd.tabulate()
자동 표시
기본 표시 기
가장 간단 한 레이 블 러 는 모든 식별 자 에 게 통일 적 인 표 시 를 분배 하 는 것 이다.다음은 모든 단 어 를 NN 으로 바 꾸 는 레이 블 러 다.그리고
evaluate()
로 검 사 를 한다.많은 단어 가 명사 일 때 첫 번 째 분석 과 안정성 을 향상 시 키 는 데 유리 하 다.brown_tagged_sents = brown.tagged_sents(categories="news")
raw = 'I do not like eggs and ham, I do not like them Sam I am'
tokens = nltk.word_tokenize(raw)
default_tagger = nltk.DefaultTagger('NN')#
print(default_tagger.tag(tokens)) # tag()
print(default_tagger.evaluate(brown_tagged_sents))
정규 표현 식 레이 블
이 규칙 은 고정 되 어 있 음 을 주의 하 세 요.규칙 이 점점 완벽 해 질 때 정확도 가 높아진다.
patterns = [
(r'.*ing$','VBG'),
(r'.*ed$','VBD'),
(r'.*es$','VBZ'),
(r'.*','NN')# ,
]
regexp_tagger = nltk.RegexpTagger(patterns)
regexp_tagger.evaluate(brown_tagged_sents)
조회 표시 기
여기 와 책 은 차이 가 있 습 니 다. python 2 와 달리 디 버 깅 에 주의 하 세 요.검색 표시 기 는 가장 가능 한 표 시 를 저장 하고
backoff
인 자 를 설정 할 수 있 으 며 표시 할 수 없 는 경우 이 표시 기 를 사용 합 니 다 (이 과정 은 후퇴 입 니 다).fd = nltk.FreqDist(brown.words(categories="news"))
cfd = nltk.ConditionalFreqDist(brown.tagged_words(categories="news"))
##############################################python2 3 #########
most_freq_words = fd.most_common(100)
likely_tags = dict((word,cfd[word].max()) for (word,times) in most_freq_words)
#######################################################################
baseline_tagger = nltk.UnigramTagger(model=likely_tags,backoff=nltk.DefaultTagger('NN'))
baseline_tagger.evaluate(brown_tagged_sents)
N - gram 레이 블
기본 1 원 레이 블
1 원 레이 블 러 의 행동 은 레이 블 러 를 찾 는 것 과 비슷 하 며 1 원 레이 블 러 를 만 드 는 기술 을 훈련 시 킵 니 다.여기 서 우리 의 레이 블 기 는 일반 모델 을 만 드 는 것 이 아니 라 기억 훈련 집 일 뿐 잘 맞 지만 새로운 텍스트 로 보급 할 수 없습니다.
size = int(len(brown_tagged_sents)*0.9)
train_sents = brown_tagged_sents[:size]
test_sents = brown_tagged_sents[size+1:]
unigram_tagger = nltk.UnigramTagger(train_sents)
unigram_tagger.evaluate(test_sents)
일반적인 N - gram 표시 기
N 원 레이 블 러 는 index = n 의 워드 를 검색 하고 n - N < = index < = n - 1 의 tag 를 검색 합 니 다.즉, 앞 단어의 tag 라벨 을 통 해 현재 단어의 tag 를 확인 하 는 것 입 니 다.
nltk.UnigramTagger()
와 유사 하 며, 자체 적 으로 가지 고 있 는 이원 레이 블 기 는: nltk.BigramTagger()
용법 이 일치 합 니 다.조합 표시 기
커버 범위 가 넓 은 알고리즘 이 정밀도 가 높 은 알고리즘 보다 더 유용 할 때 가 많다.
backoff
리 턴 레이 블 러 를 사용 하여 레이 블 러 의 조합 을 실현 합 니 다.한편, 매개 변수 cutoff
의 명시 적 성명 은 int 형 이 고 1 - n 번 만 나타 나 는 문맥 을 자동 으로 버 립 니 다.t0 = nltk.DefaultTagger('NN')
t1 = nltk.UnigramTagger(train_sents,backoff=t0)
t2 = nltk.BigramTagger(train_sents,backoff=t1)
t2.evaluate(test_sents)
원래 와 비교 해 보면 정확도 가 현저히 높 아 졌 다 는 것 을 알 수 있다.
문장 경계 표시
문장 첫머리 의 단어 에 대해 서 는 n 개의 단어 가 없다.해결 방법: 표 시 된 taggedsents 가 레이 블 기 를 훈련 시 킵 니 다.
변환 기반 레이 블: Brill 레이 블
위의 것 보다 우수 하 다.실현 의 사고: 큰 것 으로 시작 한 다음 에 디 테 일 을 복원 하고 조금씩 세밀 하 게 변화 한다.메모리 가 작 을 뿐만 아니 라 관련 문맥 도 작 아 지고 문제 에 따라 실시 간 으로 오 류 를 수정 합 니 다. 변 함 없 는 것 이 아 닙 니 다.물론 python 3 과 python 2 의 호출 은 다르다.
from nltk.tag import brill
brill.nltkdemo18plus()
brill.nltkdemo18()
본 박문 과 관련 된 내용 을 더 교류 하 는 것 을 환영 합 니 다: 블 로그 원 주소:http://www.cnblogs.com/AsuraDong/ CSDN 주소:http://blog.csdn.net/asuradong 편 지 를 보 내 교류 할 수도 있다[email protected]전 재 를 환영 하지만 출처 를 밝 혀 주세요. : )
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.