我正在尝试使用 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
本来是表示否定的不连续成分, ne
到 n'
的clitique 性质是因为 ne
后面的单词中的元音开始,因此将 n'
从 aura
中分离确实可以更容易识别 ne ... pas
。在
d'
的情况下,从 de effet
-> d'effet
转到以下单词中元音开始的发音动机相同。关于python - 法语文本上的 NLTK word_tokenize 无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47372801/