如何创建一个对单词进行标记和词干处理的函数



我的代码

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 words_sted=tokenize_and_stem("今天(2016年5月19日(是他唯一女儿的婚礼。"(16打印(词干(

在tokenize_and_stem(文本(中9
10#阻止过滤的令牌--->11个词干=词干词干(filtered_tokens(12
13回油杆

/usr/local/lib/python3.6/dist-packages/nltk/stem/nowball.py in stem(self,word(14151416"->1417 word=word.lower((14181419如果单词在self.stopwords或len(单词(<=2:

AttributeError:"list"对象没有属性"lower">

您的代码

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_token的情况下运行它,不改变使用你的方式。你不会得到任何错误,但输出将是这样的:

["今天(2016年5月19日(是他唯一的女儿的婚礼。","今天(16年5月十九日(是他的唯一女儿的婚礼","今日(2016年五月十九日(,是他的唯一的女儿婚礼。"。","今天(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.")

输出:

[今天,五月,19,2016,is,嗨,onli',女儿,结婚]

最新更新