【问题标题】:Lemmatize French text [closed]Lemmatize法语文本[关闭]
【发布时间】:2012-10-19 07:53:37
【问题描述】:

我有一些法语文本需要以某种方式处理。为此,我需要:

  • 首先,将文本标记为单词
  • 然后对这些词进行词形还原以避免多次处理同一个词根

据我所知,NLTK 中的 wordnet lemmatizer 仅适用于英语。当我给它“voudrais”等时,我想要一些可以返回“vouloir”的东西。由于撇号,我也无法正确标记。任何指针将不胜感激。 :)

【问题讨论】:

    标签: python nltk lemmatization


    【解决方案1】:

    我找到的最好的解决方案是 spacy,它似乎可以完成这项工作

    安装:

    pip3 install spacy
    python3 -m spacy download fr_core_news_md
    

    使用方法:

    import spacy
    nlp = spacy.load('fr_core_news_md')
    
    doc = nlp(u"voudrais non animaux yeux dors couvre.")
    for token in doc:
        print(token, token.lemma_)
    

    结果:

    voudrais vouloir
    non non
    animaux animal
    yeux oeil
    dors dor
    couvre couvrir
    

    查看文档了解更多详情:https://spacy.io/models/fr && https://spacy.io/usage

    【讨论】:

      【解决方案2】:

      如果你在法国银行做文本挖掘项目,我推荐cltk包。

      install cltk from cltk.lemmatize.french.lemma import LemmaReplacer

      更多详情在cltk

      【讨论】:

      • 直到 14 世纪,cltk 似乎都适用于法语,不是吗?我是否误读了它的文档?从那时起,法语的拼写肯定发生了变化,不是吗?还有新词吗?就像臭名昭著的“周末”……
      • 没错,它是用法语写的,但它是为古法语写的。 (这里是 CLTK 的贡献者)。
      【解决方案3】:

      如果您要对文本执行机器学习算法,则可以使用 n-gram 代替单词标记。它不是严格的词形还原,但它可以检测一系列 n 个相似的字母,并且收集具有相同含义的单词非常强大。

      我使用 sklearn 的函数CountVectorizer(analyzer='char_wb'),对于一些特定的文本,它比词袋更有效。

      【讨论】:

        【解决方案4】:

        Here 是 nltk 开发人员的旧但相关的评论。看起来 nltk 中最高级的词干分析器都是特定于英语的:

        nltk.stem 模块目前包含 3 个词干分析器:Porter 词干分析器、兰开斯特词干分析器和基于正则表达式的 词干分析器。 Porter 词干分析器和 Lancaster 词干分析器都是英语- 具体的。基于正则表达式的词干分析器可以定制为 使用任何你想要的正则表达式。所以你应该可以写一个 使用正则表达式词干分析器的非英语语言的简单词干分析器。 例如,对于法语:

        from nltk import stem
        stemmer = stem.Regexp('s$|es$|era$|erez$|ions$| <etc> ')
        

        但您需要提出特定语言的常规 表达自己。对于更高级的词干分析器,它可能会 有必要添加一个新模块。 (这可能是个好学生 项目。)

        有关正则表达式词干分析器的更多信息:

        http://nltk.org/doc/api/nltk.stem.regexp.Regexp-class.html

        -爱德华

        注意:他提供的链接已失效,请参阅here 了解当前的正则表达式文档。

        最近添加的snowball stemmer 似乎能够阻止法语。让我们来测试一下:

        >>> from nltk.stem.snowball import FrenchStemmer
        >>> stemmer = FrenchStemmer()
        >>> stemmer.stem('voudrais')
        u'voudr'
        >>> stemmer.stem('animaux')
        u'animal'
        >>> stemmer.stem('yeux')
        u'yeux'
        >>> stemmer.stem('dors')
        u'dor'
        >>> stemmer.stem('couvre')
        u'couvr'
        

        如您所见,有些结果有点可疑。

        不是你所希望的,但我想这是一个开始。

        【讨论】:

        • 是的,令人失望的是没有非英语语言的词干分析器。我最终做的实际上是我标记了标点符号上的单词,然后我删除了所有剩余的单字母文章(例如“l'ensemble”中剩余的 l )。然后我使用了一个单词列表和相应的词条,特别是托管在limsi.fr/Individu/anne/OLDlexique.txt 的那个,它被在线的几篇帖子引用,它成功了。雪球词干分析器看起来也能正常工作,感谢 Junuxx。 :)
        • 我的法语不太好,但我不清楚你在这里期待什么。它是词干,afaict;它不是对它们进行词形还原,这是一项不同的任务。也就是说,它返回的是词干,而不是您在字典中可以找到的形式(因此动词上没有不定式后缀)。这是设计使然;这就是词干分析器所做的。
        • 是的,这是一个很好的区分。不过我想说 animaux -> anima, voudrais -> vou 可能比上面的输出更有意义。像 yeux 这样完全不规则的复数形式很棘手;我想一个人不得不勉强接受它作为一根茎。
        【解决方案5】:

        也许使用 TreeTagger ?我没试过,但这个应用程序可以在法语中运行

        http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/
        http://txm.sourceforge.net/installtreetagger_fr.html

        【讨论】:

        • 天哪,treetaggers 提供无人监督的引理,如果可能的话,我建议远离它。
        • 我能知道你如何使用treetagger来词干吗?根据我对 treetagger 的理解,我们可以只使用 pos 标签词。
        猜你喜欢
        • 2011-06-08
        • 2012-11-09
        • 1970-01-01
        • 2021-07-09
        • 2011-02-14
        • 2012-05-13
        • 2015-06-29
        • 1970-01-01
        • 2016-04-24
        相关资源
        最近更新 更多