문제

NLTK를 사용하여 다음 명령으로 시작하여 텍스트 문자열에서 명사를 추출하고 있습니다.

tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string)))

영어로 잘 작동합니다. 독일어에서도 쉽게 작동하게하는 방법이 있습니까?

(자연 언어 프로그래밍에 대한 경험은 없지만 지금까지 훌륭한 Python NLTK 라이브러리를 사용할 수있었습니다.)

도움이 되었습니까?

해결책

자연어 소프트웨어는 Corpora와 그들이 제공하는 통계를 활용하여 마술을합니다. 독일어를 올바르게 토큰 화하는 데 도움이되도록 NLTK에 독일 코퍼스에 대해 알릴 필요가 있습니다. 나는 믿는다 Europarl 코퍼스는 당신을가는 데 도움이 될 수 있습니다.

보다 nltk.corpus.europarl_raw 그리고 이 답변 예를 들어 구성.

또한이 질문을 "NLP"로 태그하십시오.

다른 팁

그만큼 패턴 라이브러리 독일 문장을 구문 분석하기위한 함수가 포함되어 있으며 결과에는 부품 태그가 포함됩니다. 다음은 문서에서 복사됩니다.

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".

POS (Part-of Steeech) 태그는 특정 [자연] 언어에 매우 구체적입니다. NLTK에는 주어진 토큰에서 주어진 토큰의 태그를 추론하기 위해 별개의 기술을 사용하는 많은 다른 태그가 포함되어 있습니다. 이 Taggers의 대부분 (전부는 아님)은 "트릭을 수행하는"메인 또는 유일한 장치로 일종의 통계 모델을 사용합니다. 이러한 태거는 언어의 통계적 표현을 구축 할 수있는 "교육 데이터"가 필요하며 교육 데이터는 Corpora 형태로 제공됩니다.

NTLK "배포"자체에는 이러한 많은 Corpora와 다양한 유형의 Corpora를 읽을 수있는 API를 제공하는 "Corpora Readers"세트가 포함됩니다. 나는 NTLK의 업무 상태를 알지 못하고 여기에 독일 코퍼스가 포함되어 있다면. 그러나 무료 Corpora를 무료로 찾을 수 있으며 적절한 NTLK Corpora Reader를 만족시키는 형식으로 변환해야하며이를 사용하여 독일어를위한 POS Tagger를 훈련시킬 수 있습니다.

당신은 당신의 자신의 코퍼스를 만들 수도 있지만, 그것은 힘든 일의 지옥입니다. 당신이 단조로 일한다면, 당신은 학생들이 당신을 위해 그렇게하도록 학생들을 강요하고 강요하는 방법을 찾아야합니다 ;-)

아마도 Stanford Pos Tagger를 사용할 수 있습니다. 아래는 내가 쓴 레시피입니다. 내가 컴파일 한 독일 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

NLTK와 함께 사용하기 위해 독일 주석이 달린 호랑이 코퍼스를 변환하는 방법에 대한 블로그 포스트를 작성했습니다. 여기를 살펴보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top