我正在使用NLTK从文本字符串中提取名词,从以下命令开始:
tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string)))
英语很好用。 还有一种简单的方法可以让它适用于德语吗?
(我没有使用自然语言编程的经验,但我设法使用到目前为止很棒的python nltk库。)
答案 0 :(得分:21)
自然语言软件通过利用语料库及其提供的统计数据来实现其魔力。你需要告诉nltk一些德语语料库来帮助它正确地标记德语。我相信EUROPARL语料库可能会帮助您前进。
请参阅nltk.corpus.europarl_raw和this answer,例如配置。
另外,请考虑使用“nlp”标记此问题。
答案 1 :(得分:11)
Pattern library包括解析德语句子的功能,结果包括词性标签。从他们的文档中复制以下内容:
from pattern.de import parse, split
s = parse('Die Katze liegt auf der Matte.')
s = split(s)
print s.sentences[0]
>>> Sentence('Die/DT/B-NP/O Katze/NN/I-NP/O liegt/VB/B-VP/O'
'auf/IN/B-PP/B-PNP der/DT/B-NP/I-PNP Matte/NN/I-NP/I-PNP ././O/O')
如果您更喜欢SSTS标记集,则可以设置可选参数tagset="STTS"
。
答案 2 :(得分:4)
词性(POS)标记非常特定于特定的[自然]语言。 NLTK包括许多不同的标记器,它们使用不同的技术来推断给定标记中给定标记的标记。大多数(但不是全部)这些标记器使用各种统计模型作为“做技巧”的主要或唯一设备。这些标记需要一些“训练数据”来构建语言的统计表示,训练数据以语料库的形式出现。
NTLK“发行版”本身包括许多这些语料库,以及一组“语料库阅读器”,它们提供API来阅读不同类型的语料库。我不知道NTLK的事态,如果这包括任何德语语料库。然而,您可以找到一些免费的语料库,然后您需要将其转换为满足正确的NTLK语料库阅读器的格式,然后您可以使用它来训练德语的POS标签。
你甚至可以创建自己的语料库,但这是一项艰苦的工作;如果你在一个大学工作,你必须找到贿赂和胁迫学生为你这样做的方法;-)
答案 3 :(得分:4)
您可以使用Stanford POS标记器。以下是我写的食谱。我已经编译了德语NLP的python配方,您可以在http://htmlpreview.github.io/?https://github.com/alvations/DLTK/blob/master/docs/index.html上访问它们
#-*- coding: utf8 -*-
import os, glob, codecs
def installStanfordTag():
if not os.path.exists('stanford-postagger-full-2013-06-20'):
os.system('wget http://nlp.stanford.edu/software/stanford-postagger-full-2013-06-20.zip')
os.system('unzip stanford-postagger-full-2013-06-20.zip')
return
def tag(infile):
cmd = "./stanford-postagger.sh "+models[m]+" "+infile
tagout = os.popen(cmd).readlines()
return [i.strip() for i in tagout]
def taglinebyline(sents):
tagged = []
for ss in sents:
os.popen("echo '''"+ss+"''' > stanfordtemp.txt")
tagged.append(tag('stanfordtemp.txt')[0])
return tagged
installStanfordTag()
stagdir = './stanford-postagger-full-2013-06-20/'
models = {'fast':'models/german-fast.tagger',
'dewac':'models/german-dewac.tagger',
'hgc':'models/german-hgc.tagger'}
os.chdir(stagdir)
print os.getcwd()
m = 'fast' # It's best to use the fast german tagger if your data is small.
sentences = ['Ich bin schwanger .','Ich bin wieder schwanger .','Ich verstehe nur Bahnhof .']
tagged_sents = taglinebyline(sentences) # Call the stanford tagger
for sent in tagged_sents:
print sent
答案 4 :(得分:2)
我写了一篇关于如何转换德语注释TIGER语料库的博客文章,以便将其与NLTK一起使用。 Have a look at it here.