2017-02-23 73 views
10

我有一个丹麦WordNet的.txt文件。有什么方法可以将这个与NLP库一起用于Python,比如NLTK?如果不是的话,你会如何用一种不被特定图书馆支持的语言进行自然语言处理。另外还说你想用英语或荷兰语以外的语言在像spaCy这样的图书馆中进行命名实体识别。有没有办法做到这一点?是否可以将自己的WordNet添加到库中?

+1

简答:你不行。一个API只支持它支持的东西(这是spaCy最大的缺点之一)。漫长的回答是,如果你真的知道你在做什么,我想你可能可以自己编辑源代码。 – spicypumpkin

+0

@Posh_Pumpkin,这是不正确的。可以扩展API,因为它是一个开源项目,请参阅https://github.com/nltk/nltk/pull/1621。即使对'spacy',我相信@honnibal和@ines鼓励贡献:https://github.com/explosion/spaCy/blob/master/CONTRIBUTING.md – alvas

+0

@alvas嗯,是的。这不算是编辑源代码吗?我很确定这不是OP想要的。 – spicypumpkin

回答

3

有没有什么方法可以将它与NLP库一起用于Python,比如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'] 

你会怎样去了解自然语言处理在未通过给定的库支持的语言?

我经常用日语做这个。

有些技术会查看您的令牌 - 也就是说,他们会检查一个字是否为 ,字面意思是“说”或“是”等。这对于s​​temmers和 lemmatizers来说很常见,原因很明显。有些系统使用基于假设 的规则,了解语言部分如何以给定语言(通常是英语)进行交互。您可能会将这些期望转化为您的语言,但通常您不能使用这些期望。

但是,许多有用的技巧根本无法查看令牌 - 它们只是在于两个令牌是否相等。这些通常主要依赖于标签或搭配数据等功能 。您可能需要预先标记您的 数据,并且您可能需要在维基百科上以 语言培训通用语言模型,但就是这样。 Word矢量,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

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

希望有帮助!

相关问题