【发布时间】:2020-06-28 18:51:51
【问题描述】:
我必须对文本执行词干提取。问题如下:
- 标记
tc中给出的所有单词。该单词应包含字母或数字或下划线。将标记化的单词列表存储在tw - 将所有单词转换为小写。将结果存入变量
tw - 从唯一的
tw集中删除所有停用词。将结果存入变量fw - 使用 PorterStemmer 提取
fw中的每个单词,并将结果存储在列表psw
下面是我的代码:
import re
import nltk
from nltk import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer,LancasterStemmer
pattern = r'\w+';
tw= nltk.regexp_tokenize(tc,pattern);
tw= [word.lower() for word in tw];
stop_word = set(stopwords.words('english'));
fw= [w for w in tw if not w in stop_word];
#print(sorted(filteredwords));
porter = PorterStemmer();
psw = [porter.stem(word) for word in fw];
print(sorted(psw));
我的代码与所有提供的测试用例完美配合,但仅在以下测试用例中失败
tc = “我上周无意中去了喜诗糖果(我在商场里找电话维修),结果发现喜诗糖果现在收费一美元——一整美元——即使是最简单的他们的小甜点。我买了两个巧克力棒棒糖和两个巧克力焦糖杏仁东西。总成本是四左右。我的意思是,糖果很好吃,但让我们成为现实:一个士力架是 50 美分。这个每糖果一美元的启示,我可能不会很快发现自己梦幻般地回到See's Candy。”
我的输出是:
['almond', 'back', 'bar', 'bought', 'candi', 'candi', 'caramel', 'cent', 'charg', 'chocol' , 'confect', 'cost', 'dollar', 'dreamili', 'even', 'fifti', 'find', 'four', 'full', 'inadvert', 'last', 'let', '棒棒糖','look','mall','may','mean','offer','per','phone','real','repair','revel','see','simplest' , 'snicker', 'someth', 'soon', 'tasti', 'thing', 'time', 'total', 'turn', 'two', 'wander', 'wee', 'week', '去了']
预期输出是:
['almond', 'back', 'bar', 'bought', 'candi', 'candi', 'candi', 'caramel', 'cent', 'charg' , 'chocol', 'confect', 'cost', 'dollar', 'dreamili', 'even', 'fifti', 'find', 'four', 'full', 'inadvert', 'last', ' let'、'lollipop'、'look'、'mall'、'may'、'mean'、'offer'、'per'、'phone'、'real'、'repair'、'revel'、'see' , 'simplest', 'snicker', 'someth', 'soon', 'tasti', 'thing', 'time', 'total', 'turn', 'two', 'wander', 'wee', '周','去']
区别在于'Candi'的出现
寻求帮助以解决问题。
【问题讨论】:
-
什么代码产生了“预期的输出”?它是否使用了与您正在使用的所有内容相同的版本?
-
执行代码时反映的预期输出。我看不到得到预期输出的代码。是的,我相信版本是一样的。因为动手评估是在 Web IDE 上进行的。
标签: python list nlp nltk stemming