【问题标题】:POS for languages other than English [duplicate]非英语语言的 POS [重复]
【发布时间】:2016-12-11 06:19:15
【问题描述】:

我对 nltk 很陌生。

这允许我根据词性标记一个句子。但是为其他语言执行此操作时涉及哪些步骤?

import nltk
sentence = "I'm not sure!"
tokens = nltk.word_tokenize(sentence)
tagged = nltk.pos_tag(tokens)

更新

我有兴趣从西班牙语开始。

更新 2

import nltk
from nltk.tokenize import word_tokenize

training_set = [[(w.lower(),t) for w,t in s] for s in nltk.corpus.conll2002.tagged_sents('esp.train')]

unigram_tagger = nltk.UnigramTagger(training_set)
bigram_tagger = nltk.BigramTagger(train_set, backoff=unigram_tagger)

tokens = [token.lower() for token in word_tokenize("El Congreso no podrá hacer ninguna ley con respecto al establecimiento de la religión, ni prohibiendo la libre práctica de la misma; ni limitando la libertad de expresión, ni de prensa; ni el derecho a la asamblea pacífica de las personas, ni de solicitar al gobierno una compensación de agravios.")]

制作:

[('el', 'DA'), ('congreso', 'NC'), ('no', 'RN'), ('podrá', 'VMI'), ('hacer', 'VMN'), ('ninguna', 'DI'), ('ley', 'NC'), ('con', 'SP'), ('respecto', 'NC'), ('al', 'SP'), ('establecimiento', 'NC'), ('de', 'SP'), ('la', 'DA'), ('religión', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('prohibiendo', None), ('la', 'DA'), ('libre', 'AQ'), ('práctica', 'NC'), ('de', 'SP'), ('la', 'DA'), ('misma', 'DI'), (';', 'Fx'), ('ni', 'CC'), ('limitando', None), ('la', 'DA'), ('libertad', 'NC'), ('de', 'SP'), ('expresión', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('de', 'SP'), ('prensa', 'NC'), (';', 'Fx'), ('ni', 'CC'), ('el', 'DA'), ('derecho', 'NC'), ('a', 'SP'), ('la', 'DA'), ('asamblea', 'NC'), ('pacífica', 'AQ'), ('de', 'SP'), ('las', 'DA'), ('personas', 'NC'), (',', 'Fc'), ('ni', 'CC'), ('de', 'SP'), ('solicitar', 'VMN'), ('al', 'SP'), ('gobierno', 'NC'), ('una', 'DI'), ('compensación', 'NC'), ('de', 'SP'), ('agravios', None), ('.', 'Fp')]

【问题讨论】:

  • 您的其他语言在我看来仍然很像英语(但我不确定)。
  • 说真的:这真的取决于语言和任务。对于标记化,NLTK 支持多种开箱即用的语言——只需将语言作为第二个参数添加到word_tokenize()。对于 POS 标记,您需要使用特定于语言的模型创建一个标记器对象(您甚至可能必须从第三方站点获取);没有唯一的答案,您需要指定相关语言。
  • @lenz 我已按要求更新了我的问题。

标签: python nltk


【解决方案1】:

Afaik nltk 没有为除英语以外的任何语言提供现成的标记器或解析器。在nltk之外有这样的工具,你可以下载使用。

nltk 确实提供了一些工具来训练您自己的西班牙语标注器,使用一个带有西班牙语标签的语料库作为培训材料。例如,您可以按照 nltk 对 building a tagger 的说明进行操作,但使用 conll2002.tagged_sents("esp.train") 作为训练数据。它只有大约 250K 字,因此您不会获得出色的性能,但它应该可以帮助您入门。 (当然你可以找到一个更大的标记语料库来训练。)

【讨论】:

  • 如果我想标记句子或者我想自己标记单词,是否应该对标记器进行不同的训练。例如,当我训练了标注器时,它是否能够确定“hacia”是一个没有句子上下文的介词?
  • 我是否按照我最初问题中的第二次更新正确地做事?
  • 不错,但您的解决方案无法标记未知单词(默认标记器的用途)。通过在conll2002.tagged_sents("esp.testa") 上调用其evaluate() 方法来测试您的标记器。 nltk 的工具包中还有比 ngram 标记器更复杂的标记器(例如HiddenMarkovModelTaggerPerceptronTagger),但它们需要更长的时间来训练。
猜你喜欢
  • 1970-01-01
  • 2018-11-20
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 2016-04-17
相关资源
最近更新 更多