2017-01-07 17 views
1

私は現在スタンフォードパーサー用のPythonインターフェイスを使用しています。Stanford Parser for Python:出力形式

from nltk.parse.stanford import StanfordParser 
    import os 

    os.environ['STANFORD_PARSER'] ='/Users/au571533/Downloads/stanford-parser-full-2016-10-31' 
    os.environ['STANFORD_MODELS'] = '/Users/au571533/Downloads/stanford-parser-full-2016-10-31' 
    parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 

    new=list(parser.raw_parse("The young man who boarded his usual train that Sunday afternoon was twenty-four years old and fat. ")) 
    print new 

私が手出力は次のようなものになります。

[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('NP', [Tree('DT', ['The']), Tree('JJ', ['young']), Tree('NN', ['man'])]), Tree('SBAR', [Tree('WHNP', [Tree('WP', ['who'])]), Tree('S', [Tree('VP', [Tree('VBD', ['boarded']), Tree('NP', [Tree('PRP$', ['his']), Tree('JJ', ['usual']), Tree('NN', ['train'])]), Tree('NP', [Tree('DT', ['that']), Tree('NNP', ['Sunday'])])])])])]), Tree('NP', [Tree('NN', ['afternoon'])]), Tree('VP', [Tree('VBD', ['was']), Tree('NP', [Tree('NP', [Tree('JJ', ['twenty-four']), Tree('NNS', ['years'])]), Tree('ADJP', [Tree('JJ', ['old']), Tree('CC', ['and']), Tree('JJ', ['fat'])])])]), Tree('.', ['.'])])])] 

しかし、私は音声のみのラベルの一部を必要とし、したがって、私は言葉のように見える形式で出力をしたいのですが/タグ。

javaでは、-outputFormat 'wordsAndTags'を指定することができ、それは私が望むものを正確に提供します。これをPythonでどのように実装するかについてのヒント?

助けてくれれば幸いです。 ありがとう!

PS:スタンフォードPOSTaggerを使用しようとしましたが、それははるかに正確な私が興味の単語のいくつかのことである

+0

出力をどのように表示するかの例で編集できますか? –

+0

上記のコードの文の場合、['/ DT'、 'young/JJ'、 'man/NN']のようなもの、文字列のような項目のリスト、タプルやテーブルのリスト大丈夫です。要点は次のとおりです。依存関係ツリーの情報は必要ありませんが、各単語の品詞のみです。ありがとう! :) – roberta

答えて

1

あなたはthe NLTK classes for the Stanford parserを見れば、あなたはraw_parse_sents()方法は」doesnのことを見ることができます必要なオプション-outputFormat wordsAndTagsを送信し、代わりに-outputFormat Pennを送信します。 StanfordParserから独自のクラスを派生させた場合は、このメソッドをオーバーライドしてwordsAndTagsという形式を指定できます。

from nltk.parse.stanford import StanfordParser 

class MyParser(StanfordParser): 

     def raw_parse_sents(self, sentences, verbose=False): 
     """ 
     Use StanfordParser to parse multiple sentences. Takes multiple sentences as a 
     list of strings. 
     Each sentence will be automatically tokenized and tagged by the Stanford Parser. 
     The output format is `wordsAndTags`. 

     :param sentences: Input sentences to parse 
     :type sentences: list(str) 
     :rtype: iter(iter(Tree)) 
     """ 
     cmd = [ 
      self._MAIN_CLASS, 
      '-model', self.model_path, 
      '-sentences', 'newline', 
      '-outputFormat', 'wordsAndTags', 
     ] 
     return self._parse_trees_output(self._execute(cmd, '\n'.join(sentences), verbose)) 
+0

いいね!それを行う方法の簡単な例を示すことは可能でしょうか?私はそれほど良いプログラマーではない:Dありがとう! – roberta

+0

ありがとう!それでも、小さな問題: "MyParserには属性がありません。" _make_tree 'があります。これはstanford.py> GenericStanfordParser(ParserI)の_parse_trees_outputで必要と思われるものです。ご協力ありがとうございました! – roberta

+0

ああ、そうです。代わりに 'StanfordParser'から継承してみてください。 –