我爲此使用了Ruby。 Freeling(一個NLP工具)有一個淺解析器,當我運行一個淺解析命令時,它會爲文本「我剛讀過這本書,蚱蜢很沉重」返回一個字符串。如何將命令行輸出從Freeling轉換爲易耗陣列
a = <<EOT
S_[
sn-chunk_[
+(I i PRP -)
]
adv_[
+(just just RB -)
]
vb-chunk_[
+(read read VB -)
]
sn-chunk_[
(the the DT -)
+n-chunk_[
(book book NN -)
+n-chunk_[
+(The_Grasshopper_Lies_Heavy the_grasshopper_lies_heavy NP -)
]
]
]
st-brk_[
+(. . Fp -)
]
]
EOT
我想從這個以下數組:
["I", "just", "read", "the book The Grasshopper Lies Heavy","."]
(我想合併是在樹下,並把它作爲一個單一的數組元素的話)
到目前爲止,我已經寫了這麼多:
b = a.gsub(/.*\[/,'[').gsub(/.*\+?\((\w+|.) .*/,'\1').gsub(/\n| /,"").gsub("_","")
返回
[[I][just][read][the[book[The Grasshopper Lies Heavy]]][.]]
那麼,我怎麼能得到所需的數組?
您確定您使用的API無法輸出令牌列表嗎?加。對於文檔,如果您使用命令行,請嘗試「--outf token」。 –
@WiktorStribiżew它沒有。 '淺'是結果選項之一,如果我做另一個名爲'tagged'的選項,它只是分別標記每個單詞/命名實體,而我沒有得到「The Grasshopper Lies Heavy」這本書的樹。 –
用正則表達式的方法,你如何區分真正的'_'和Freeling樹構建器引入的?您現在刪除所有下劃線。或者在輸出樹中沒有下劃線? –