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

2024-10-01 19:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写代码,该代码传入已标记的文本,并过滤掉停止词,然后对其进行词干和标记。然而,我不确定我应该以什么顺序进行标记。这就是我目前的情况:

#### 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')的方式有关,等等

我是否应该使用不同的词干分析器/标记器?还是我的代码中有错误

提前谢谢


Tags: 代码标记postag错误单词wordps
2条回答

在应用词干或柠檬化之前,应该标记文本

去掉单词的结尾会带走关于一个单词可以是什么词性标记的重要线索

hous作为形容词的原因是,任何标记者都希望使用未处理的标记,而英语中以-ous结尾的单词通常是形容词(邪恶的严重的)。如果你先标记它,它可以被识别(即使没有上下文)为名词或动词。然后,标记者可以使用上下文(前面是名词?->;)来消除最可能出现的歧义

一个好的引理学家可以考虑词性,例如,housing可以是名词(引理:housing)或动词(引理:house)。有了p-o-s信息,柠檬人可以在那里做出正确的选择

您是使用词干还是柠檬化取决于您的应用程序。在许多方面,它们是等效的。与我的经验主要不同的是:

  1. 词干分析要快得多,因为词干分析器有一些关于如何处理各种结尾的规则
  2. Lemmatization为您提供了“适当”的单词,您可以在字典中查找这些单词(如果您想在其他语言或定义中获得gloss)
  3. 词干字符串有时看起来与原始单词完全不同,如果您将它们呈现给用户,他们可能会感到困惑
  4. 词干分析器将意思相似但引理不同的词合并在一起,因此对于信息检索来说,词干分析器可能更有用
  5. 词干分析器不需要单词列表,因此如果您想编写自己的词干分析器,它比编写lemmatiser(如果您正在处理没有现成工具的语言)要快

我建议使用柠檬化而不是词干分析,词干分析只是从末尾切掉字母,直到找到词根/词干。柠檬化也会查看周围的文本,以确定给定单词的词性

相关问题 更多 >

    热门问题