2017-07-28 93 views
0

我想使用spaCy解析文檔並應用令牌過濾器,以便最終的spaCy文檔不包含過濾的令牌。我知道我可以過濾令牌的序列,但我有興趣擁有實際的Doc結構。如何從spaCy文檔過濾令牌

text = u"This document is only an example. " \ 
    "I would like to create a custom pipeline that will remove specific tokesn from the final document." 

doc = nlp(text) 

def keep_token(tok): 
    # This is only an example rule 
    return tok.pos_ not not in {'PUNCT', 'NUM', 'SYM'} 

final_tokens = list(filter(keep_token, doc)) 

# How to get a spacy.Doc from final_tokens? 

我試圖重建從令牌列出了新spaCy Doc但是API並不清楚如何做到這一點。

回答

0

根據你想要做什麼,有幾種方法。

1.獲取原始文檔

令牌SpaCy有權使用自己的文件引用,所以你可以這樣做:

original_doc = final_tokens[0].doc 

這樣,你仍然可以得到POS,分析數據等。從原來的句子。

2.構造而不刪除標記

一個新文檔時,可以追加所有空白令牌的字符串,並創建一個新文件。有關text_with_ws的信息,請參閱token docs

doc = nlp(''.join(map(lambda x: x.text_with_ws, final_tokens))) 

這可能不會給你想要什麼,雖然 - 銷售點標籤不一定是相同的,並將得到的句子可能沒有意義。

如果這些都不是你想到的,讓我知道,也許我可以幫助。

+0

我知道第二個解決方案,它基本上是我們目前正在做的解決方法。但它有兩個問題:1. PoS標籤可能會隨着您的指向而改變2.您需要重新解析文檔以使性能下降。 –

+0

你能解釋一下你在收到文件後想做什麼嗎?你爲什麼要刪除令牌? – polm23