저는 파이썬과 NLTK를 처음 접했습니다. 한 가지 문제는 저를 당혹스럽게합니다.
내가 할 때
tokenized = custom_sent_tokenizer.tokenize("some long text")
그것은 나에게 완벽한 결과를줍니다. 그러나이 하드 코딩 된 문자열을 거대한 텍스트를 포함하는 변수로 변경하면 주제 비주얼리 제이션에 언급 된 오류가 발생합니다.
tokenized = custom_sent_tokenizer.tokenize(text)
...
AttributeError: 'list' object has no attribute 'abbrev_types'
아래는 내 전체 코드입니다.
from __future__ import division
import urllib.request
import csv
import nltk
from string import punctuation
from nltk.corpus import stopwords
from nltk.tokenize import PunktSentenceTokenizer
comments = open("CNPS_Comments.txt").read()
comments_list = comments.split('\n')
custom_sent_tokenizer = PunktSentenceTokenizer(comments_list[:300])
##tokenized = custom_sent_tokenizer.tokenize("some long text")
text=""
for comment in comments_list:
text += comment
tokenized = custom_sent_tokenizer.tokenize(text)
def process_content():
try:
for i in tokenized[:5]:
words = nltk.word_tokenize(i)
tagged = nltk.pos_tag(words)
print(tagged)
except Exception as e:
print(str(e))
process_content()
오늘 파이썬으로 시작했는데 여기서 효과적으로하지 못하는 일이 많을 수 있습니다.
문제를 일으키는 줄은 옳다 : 그것이 인자로 단일 문자열과 함께 문장 토크 나이저를 사용하는 방법이다. 몬스터를 만들었 기 때문에 오류가 발생합니다. :-)
Punkt 문장 토크 나이 저는 비지도 알고리즘을 기반으로합니다. 긴 텍스트를 제공하고 문장 경계가 있어야하는 위치를 파악합니다. 그러나 문장 목록 (의 처음 300 개 요소 comments_list
)으로 토크 나이저를 훈련 시켰습니다 . 어떻게 든 토크 나이저가 알아 차리지 못하고 올바르게 사용하려고 할 때 오류가 발생하는 것을 제공합니다.
문제를 해결하려면 단일 문자열로 토크 나이저를 훈련 시키십시오. 다음과 같이 문자열 목록을 하나로 결합하는 것이 가장 좋습니다.
tokenizer = PunktSentenceTokenizer(" ".join(comments_list[:300]))
추신. 리터럴 문자열을 토큰화할 때 성공적으로 작동하는 것에 대해 잘못 알고 있어야합니다. 확실히 작동하는 코드와 질문의 코드 사이에는 다른 차이점이 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다