2014-11-05 51 views
1

我想從句子中提取句法信息。我曾嘗試是如何使用corenlp提取python的語法特徵?

corenlp_dir = "/home/corenlp-python/stanford-corenlp-full-2013-11-12/" 
parser = corenlp.StanfordCoreNLP(corenlp_path=corenlp_dir) 

result_json = json.loads(parser.parse("I am Alice.")) 
#pprint.pprint(result_json) 
for sentence in result_json["sentences"]: 
    pprint.pprint(sentence["parsetree"]) 
    print type(sentence["parsetree"]) 

我只得到

--># u'(ROOT (S (NP (PRP I)) (VP (VBP am) (NP (NNP Alice))) (. .)))' 
<type 'unicode'> 

,結果是一個字符串,而不是parsertree。 但是,我真正想要的就像是一個可用於進行文本分類的語法功能。如何從上面的結果中提取特定的語法特徵? 我對如何去做沒有想法。任何人都可以幫我或給我一些建議嗎?

回答

1

您最好首先了解結果的格式,然後編寫自己的代碼來演示/繪製結果(如果需要)。

把你的示例結果, 一個最小單位可以(PRP I),這意味着「我」玩「代詞」在這句話中的作用,如果你看出來當前支架,(NP (PRP I))意思是這個代詞是一個名詞短語(NP)。等 這就是你如何從下到上得到一個解析樹,最終你會達到'根'。

+0

感謝您的回答。我是NLP的新手。我已經理解了「parsetree」的含義。但我真的不知道如何在句法上標記單詞,比如「I」,它與POS不一樣。你能給我一些想法嗎? – allenwang 2014-11-06 11:39:57

+0

'I'的POS標籤在最接近的括號內是'PRP'。這個過程被稱爲POS標記。然後你得到這個PRP是'NP'(名詞短語),一個NP可以是一個單詞,但通常是一個短語。現在你得到一些更大的單位,將句子分成幾部分稱爲分塊。從單元構建一個樹狀結構,整個過程是分析這個句子的語法。 – eastdog 2014-11-07 10:09:20

+0

謝謝你的回答,但ROOT的功能是什麼?例如,在生產規則中,如S-> NP + PRP,我們不需要ROOT,對吧? – allenwang 2014-11-07 15:25:36