我正在尝试使用 NLTK word_tokenize 法语 的文本上使用:

txt = ["Le télétravail n'aura pas d'effet sur ma vie"]
print(word_tokenize(txt,language='french'))

它应该打印:
['Le', 'télétravail', 'n'','aura', 'pas', 'd'','effet', 'sur', 'ma', 'vie','.']

但我得到:
['Le', 'télétravail', "n'aura", 'pas', "d'effet", 'sur', 'ma', 'vie','.']

有谁知道为什么在法语中没有正确分割 token 以及在用法语进行 NLP 时如何克服这个(和其他潜在问题)?

最佳答案

我认为 word_tokenize 没有明确的法语模型(这是用于英语 Penn Treebank 的修改后的 treebank 标记器)。 '
word_tokenize 函数在实际单词标记化之前使用 sent_tokenize 函数执行句子标记化。 language 中的 word_tokenize 参数仅用于 sent_tokenize 部分。

或者,您可以使用具有某些语言相关正则表达式的 MosesTokenizer(并且它确实支持法语):

>>> from nltk.tokenize.moses import MosesTokenizer
>>> moses = MosesTokenizer(lang='fr')
>>> sent = u"Le télétravail n'aura pas d'effet sur ma vie"
>>> moses.tokenize(sent)
[u'Le', u't\xe9l\xe9travail', u'n'', u'aura', u'pas', u'd'', u'effet', u'sur', u'ma', u'vie']

如果你不喜欢摩西转义特殊的 XML 字符,你可以这样做:
>>> moses.tokenize(sent, escape=False)
[u'Le', u't\xe9l\xe9travail', u"n'", u'aura', u'pas', u"d'", u'effet', u'sur', u'ma', u'vie']

解释为什么拆分 n'd' 在法语 NLP 中很有用。

从语言上讲,将 n'd' 分开确实是有意义的,因为它们是具有自己的句法和语义属性但仅限于根/宿主的团体。

在法语中, ne ... pas 本来是表示否定的不连续成分, nen' 的clitique 性质是因为 ne 后面的单词中的元音开始,因此将 n'aura 中分离确实可以更容易识别 ne ... pas

d' 的情况下,从 de effet -> d'effet 转到以下单词中元音开始的发音动机相同。

关于python - 法语文本上的 NLTK word_tokenize 无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47372801/

10-14 18:30