NLP:如何结合词干和标记?

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

我正在尝试编写代码,该代码传递经过标记化的文本,并过滤掉停用词,然后阻止并标记它。但是,我不确定应该以什么顺序进行茎和标记。这是我目前所拥有的:

#### 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通常会误贴单词。例如,当原始单词实际上是名词“ house”时,它将“ hous”标记为形容词。但是,当我尝试在标记后进行词干处理时,它给我一个关于pos_tag如何无法处理“元组”的错误-我猜想这与词干将词列表格式化为[('come', 'VB'), ('hous', 'JJ')的方式有关]等

我应该使用其他词干/匕首吗?还是我的代码中的错误?

提前感谢!

python nlp nltk tagging stemming
2个回答
1
投票

我建议对词干使用词形除法,从词尾将词干切掉,直到到达词根/词干为止。词法化还会查看周围的文本,以确定给定单词的词性。


0
投票

您应该标记文本之前,然后对其应用词干或词义化。

删除单词的结尾消除了关于单词可以成为词性标签的关键线索。

您将hous用作形容词的原因是,任何标记器都希望未处理的标记,而英语中以-ous结尾的单词通常是形容词(nefariousserious )。如果先标记它,它可以被识别(甚至没有上下文)为名词或动词。然后,标记者可以使用上下文(以the?->名词开头)消除歧义,这是最有可能的。

一个好的词修饰器可以考虑词性,例如住房可以是名词(词性:住房)或动词(词性:房子)。借助p-o-s信息,切词机可以在那里做出正确的选择。

您是否使用词干或词根限制取决于您的应用程序。对于许多目的,它们将是等效的。根据我的经验,主要区别在于:

  1. 加粗更快,因为词干对于如何处理各种结局有一些规则
  2. 词法化为您提供了“适当的”词,您可以在词典中查找(如果您希望获得其他语言或定义的词汇)
  3. 带茎的字符串有时看起来不像原始单词,如果您将其呈现给人类用户,则可能会感到困惑
  4. Stemmers合并含义相似但词缀不同的单词,因此对于信息检索而言,它们可能更有用
  5. Stemmers不需要单词列表,因此,如果您想编写自己的词干分析器,它比编写lemmatiser更快(如果您正在处理不存在现成工具的语言,则是]
© www.soinside.com 2019 - 2024. All rights reserved.