我的代码
def tokenize_and_stem(text):
tokens = [sent for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(text)]
filtered_tokens = [token for token in tokens if re.search('[a-zA-Z]', token)]
stems = stemmer.stem(filtered_tokens)
words_stemmed = tokenize_and_stem("Today (May 19, 2016) is his only daughter's wedding.")
print(words_stemmed)
并且我收到此错误
AttributeError Traceback(最近一次通话)在13个返回茎14---> 15个单词_stemmed = tokenize_and_stem(“今天(2016年5月19日)是他唯一的女儿的婚礼。”)16打印(words_stemmed)
在tokenize_and_stem中(文本)910#阻止filtered_tokens---> 11个茎= stemmer.stem(filtered_tokens)1213个返回茎
/ usr / local / lib / python3.6 / dist-packages / nltk / stem / snowball.py in stem(self,word)14151416“”“-> 1417字= word.lower()14181419如果单词self.stopwords或len(word)<= 2:
AttributeError:“列表”对象没有属性“降低”
您的代码
def tokenize_and_stem(text):
tokens = [sent for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(text)]
filtered_tokens = [token for token in tokens if re.search('[a-zA-Z]', token)]
stems = stemmer.stem(filtered_tokens)
words_stemmed = tokenize_and_stem("Today (May 19, 2016) is his only daughter's
wedding.")
print(words_stemmed)
错误显示“”“ word = word.lower()...,如果self.stopwords或len(word)中的单词<= 2:列表对象没有属性'lower'”“”
错误不仅是因为.lower()而是因为长度如果您尝试在不更改第5行的filtered_tokens的情况下运行它,无需更改即可使用您的。您将不会有任何错误,但输出将是这样的:
[“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他的唯一女儿的婚礼。 ”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。” ,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天(2016年5月19日)是他唯一的女儿的婚礼。”,“今天( “,“今天(2016年5月19日)是他唯一的女儿的婚礼。”
这是您的固定代码。
def tokenize_and_stem(text):
tokens = [word for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(sent)]
filtered_tokens = [token for token in tokens if re.search('[a-zA-Z]', token)]
stems = [stemmer.stem(t) for t in filtered_tokens if len(t) > 0]
return stems
words_stemmed = tokenize_and_stem("Today (May 19, 2016) is his only daughter's wedding.")
print(words_stemmed)
所以,我只有更改的第3行和第7行
import nltk
import string
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
def tokenize_and_stem(text):
tokens = nltk.tokenize.word_tokenize(text)
# strip out punctuation and make lowercase
tokens = [token.lower().strip(string.punctuation)
for token in tokens if token.isalnum()]
# now stem the tokens
tokens = [stemmer.stem(token) for token in tokens]
return tokens
tokenize_and_stem("Today (May 19, 2016) is his only daughter's wedding.")
输出:
[['today','may','19','2016','is','hi','onli','daughter','wed']