是否可以将自己的WordNet添加到库中?

时间:2017-02-23 17:35:41

标签: python machine-learning nlp nltk spacy

我有丹麦WordNet的.txt文件。有没有办法将这个用于Python的NLP库,如NLTK?如果没有,您将如何使用给定库不支持的语言进行自然语言处理。还要说你想在像spaCy这样的库中用英语或荷兰语以外的语言进行命名实体识别。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:5)

有没有办法将这个用于Python的NLP库,如NLTK?

你可以用NLTK做到这一点,虽然它有点尴尬。

您需要将WordNet语料库转换为Open Multilingual Wordnet格式,这是一种简单的制表符分隔格式。请注意,他们已经有丹麦语WordNet。

然后你应该在NLTK中安装WordNet和Open Multilingual Wordnet语料库,如果你还没有这样做的话。这将创建一个类似~/nltk_data/corpora/omw/的目录,其中包含每个语言文件的子目录。您需要通过为其创建目录并命名文件来添加语料库:

~/nltk_data/corpora/omw/xxx/wn-data-xxx.tab

xxx可以是任何内容,但在两个地方都必须相同。此文件名模式在NLTK here中进行了硬编码。

之后,您可以将xxx指定为lang参数来使用WordNet。这是一个例子from the documentation

>>> wn.synset('dog.n.01').lemma_names('ita') # change 'ita' to 'xxx'
['cane', 'Canis_familiaris']

您如何使用特定库不支持的语言进行自然语言处理?

我经常和日本人一起做这件事。

有些技巧会查看您的令牌 - 也就是说,他们检查一个单词是否正确 字面上“说”或“是”或某事。这对于词干和常见问题很常见 引理器有明显的原因。一些系统使用基于假设的规则 关于部分语言如何以给定语言(通常是英语)进行交互。您 也许能够将这些期望转化为您的语言 你就是不能用这些。

然而,许多有用的技术根本不会看到你的标记内部 - 它们 只关心两个令牌是否相等。这些通常主要依赖于 标签或搭配数据等功能。您可能需要预先标记您的 数据,你可能想在维基百科上训练一般语言模型 语言,但就是这样。单词向量,NER,文档相似性是示例 缺乏语言支持的问题通常不是问题。

还要说你想在像spaCy这样的图书馆里用英语或荷兰语以外的语言进行命名实体识别。有没有办法做到这一点?

SpaCy为NER提供了custom labelling的方法。使用它与 否则不支持的语言没有记录,会有点棘手。 但是,由于您不需要NER的完整语言模型,因此可以使用NER 具有标记示例的特定工具。

以下是一些示例训练数据 基于CoNLL格式的CRF++

He        PRP  B-NP
reckons   VBZ  B-VP
the       DT   B-NP
current   JJ   I-NP
account   NN   I-NP
deficit   NN   I-NP
will      MD   B-VP
narrow    VB   I-VP
to        TO   B-PP
only      RB   B-NP
#         #    I-NP
1.8       CD   I-NP
billion   CD   I-NP
in        IN   B-PP
September NNP  B-NP
.         .    O

He        PRP  B-NP
reckons   VBZ  B-VP
..

这种格式受到几种CRF或其他NER工具的支持。 CRFSuite是一个Python wrapper

对于这种数据,算法并不真正关心第一列中的内容,因此语言支持不是问题。

希望有所帮助!

相关问题