如何创建标记和词干的函数

问题描述 投票:0回答:2

我的代码

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:“列表”对象没有属性“降低”

python nltk token tokenize stemming
2个回答
1
投票

您的代码

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行


2
投票
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']

© www.soinside.com 2019 - 2024. All rights reserved.