我正在尝试编写代码,该代码传入已标记的文本,并过滤掉停止词,然后对其进行词干和标记。然而,我不确定我应该以什么顺序进行标记。这就是我目前的情况:
#### Stemming
ps = PorterStemmer() # PorterStemmer imported from nltk.stem
stemText = []
for word in swFiltText: # Tagged text w/o stop words
stemText.append(ps.stem(word))
#### POS Tagging
def tagging():
tagTot = []
try:
for i in stemText:
words = nltk.word_tokenize(i) # I need to tokenize again (idk why?)
tagged = nltk.pos_tag(words)
tagTot = tagTot + tagged # Combine tagged words into list
except Exception as e:
print(str(e))
return tagTot
tagText = tagging()
乍一看,这很管用。然而,因为我是第一个词干,所以pos_tag
经常错误地标注单词。例如,它将“hous”标记为形容词,而原来的单词实际上是名词“house”。但是当我尝试在标记后进行词干时,它会给我一个关于pos_tag
如何不能处理“元组”的错误——我猜这与词干分析器将单词列表格式化为[('come', 'VB'), ('hous', 'JJ')
的方式有关,等等
我是否应该使用不同的词干分析器/标记器?还是我的代码中有错误
提前谢谢
在应用词干或柠檬化之前,应该标记文本
去掉单词的结尾会带走关于一个单词可以是什么词性标记的重要线索
将hous作为形容词的原因是,任何标记者都希望使用未处理的标记,而英语中以-ous结尾的单词通常是形容词(邪恶的,严重的)。如果你先标记它,它可以被识别(即使没有上下文)为名词或动词。然后,标记者可以使用上下文(前面是名词?->;)来消除最可能出现的歧义
一个好的引理学家可以考虑词性,例如,housing可以是名词(引理:housing)或动词(引理:house)。有了p-o-s信息,柠檬人可以在那里做出正确的选择
您是使用词干还是柠檬化取决于您的应用程序。在许多方面,它们是等效的。与我的经验主要不同的是:
我建议使用柠檬化而不是词干分析,词干分析只是从末尾切掉字母,直到找到词根/词干。柠檬化也会查看周围的文本,以确定给定单词的词性
相关问题 更多 >
编程相关推荐