是否可以将您自己的 WordNet 添加到图书馆中?

Is it possible to add your own WordNet to a library?

我有一个丹麦语 WordNet 的 .txt 文件。有什么方法可以将它与 Python 的 NLP 库一起使用,例如 NLTK?如果不是,您将如何使用给定库不支持的语言进行自然语言处理。还说你想在像 spaCy 这样的库中用英语或荷兰语以外的语言进行命名实体识别。有什么办法吗?

有什么方法可以将它与 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']

对于给定库不支持的语言,您如何进行自然语言处理?

我经常用日语这样做。

有些技术会查看您的标记内部 - 也就是说,它们会检查一个词是否 字面上 "say" 或 "be" 之类的。这在词干分析器中很常见,并且 词形还原器出于显而易见的原因。一些系统使用基于假设的规则 关于词性如何在给定语言(通常是英语)中相互作用。你 可能能够将这些期望翻译成您的语言,但通常 你就是不能用这些。

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

还说你想在像 spaCy 这样的库中用英语或荷兰语以外的语言进行命名实体识别。有什么办法吗?

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

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

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.

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

希望对您有所帮助!