13

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

4

1 回答 1

7

有没有办法将它与 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 中进行了硬编码。

之后,您可以通过将 指定xxxlang参数来使用您的 WordNet。这是文档中的一个示例:

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

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

我经常用日语这样做。

一些技术会查看你的标记内部——也就是说,它们会检查一个词的字面意思是“say”还是“be”或其他东西。由于显而易见的原因,这在词干分析器和词形还原器中很常见。一些系统使用基于关于在给定语言(通常是英语)中词性如何交互的假设的规则。您也许可以将这些期望翻译成您的语言,但通常您不能使用这些。

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

还说您想在 spaCy 之类的库中以英语或荷兰语以外的语言进行命名实体识别。有没有办法做到这一点?

SpaCy 为 NER 提供了一种自定义标签的方法。没有记录将它与其他不受支持的语言一起使用,并且会有点棘手。但是,由于您不需要 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 包装器的。

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

希望有帮助!

于 2017-07-20T15:18:16.427 回答