我有一个丹麦 WordNet 的 .txt 文件。有没有办法将它与 Python 的 NLP 库(如 NLTK)一起使用?如果不是,您将如何使用给定库不支持的语言进行自然语言处理。还说您想在 spaCy 之类的库中以英语或荷兰语以外的语言进行命名实体识别。有没有办法做到这一点?
1 回答
有没有办法将它与 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 中进行了硬编码。
之后,您可以通过将 指定xxx
为lang
参数来使用您的 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 包装器的。
对于这种数据,算法并不真正关心第一列中的内容,因此语言支持不是问题。
希望有帮助!