【问题标题】:NLP: How do I combine stemming and tagging?NLP:我如何结合词干和标记?
【发布时间】:2020-04-24 01:21:22
【问题描述】:

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

#### 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 如何无法处理“元组”的错误 - 我猜这与词干分析器将单词列表格式化为 @987654324 的方式有关@等

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

提前致谢!

【问题讨论】:

    标签: python nlp nltk tagging stemming


    【解决方案1】:

    您应该在对其应用词干或词形还原之前标记文本

    删除词尾会带走关于词性标签的重要线索。

    您将 hous 作为形容词的原因是任何标注器都需要未处理的标记,而英语中以 -ous 结尾的词通常是形容词(nefarious 严重)。如果您首先标记它,它可以被识别(即使没有上下文)是名词或动词。然后,标注器可以使用上下文(前面是 the? -> 名词)来消除最可能的歧义。

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

    您使用词干提取还是词形还原取决于您的应用程序。出于许多目的,它们将是等效的。与我的经验的主要区别在于:

    1. 词干提取速度要快得多,因为词干分析器对如何处理各种结尾有一些规则
    2. 词形还原为您提供可以在字典中查找的“正确”单词(如果您想获得其他语言或定义的注释)
    3. 词干字符串有时看起来与原始单词完全不同,如果您将它们呈现给人类用户,他们可能会感到困惑
    4. 词干将含义相似但词条不同的词混为一谈,因此对于信息检索,它们可能更有用
    5. 词干分析器不需要单词列表,因此如果您想编写自己的词干分析器,它比编写词法分析器更快(如果您正在处理没有现成工具的语言)

    【讨论】:

    • 非常感谢!这很有意义。我现在正在使用词形还原,我不知道如何让分块来处理它。如果您可以在here 上查看我的问题,这对我来说意味着世界。
    【解决方案2】:

    我建议在词干提取上使用词形还原,词干提取只是从末尾切掉字母,直到到达词根/词干词。词形还原还查看周围的文本以确定给定单词的词性。

    【讨论】:

    • 哦,那么词形还原标记也可以吗?我没有意识到这一点!
    • 我刚刚在网上快速搜索了一下,发现一个网站建议我使用 WordNet 或 TextBlob。你倾向于使用其中一个吗?如果您想查看,请访问以下网站:machinelearningplus.com/nlp/lemmatization-examples-python
    • 嗨@MollyTaylor,是的!
    • 词形还原和标记是两个独立的过程。一些应用程序可能会结合这两个任务来改进结果(请参阅我的回复中的详细信息)
    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多