2017-07-28 3 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? 

私はトークンのリストから新しいスペイシーDocを再構築しようとしたが、APIはそれを行う方法は明らかではありません。

答えて

0

何をしたいかによって、いくつかのアプローチがあります。

1スペイシーで

トークンは、あなたがこれを行うことができますので、そのドキュメントへの参照を持って、元の文書を取得:あなたはまだのPoSを得ることができます

original_doc = final_tokens[0].doc 

この方法は、データなどを解析元の文から。

2.あなたは空白を持つすべてのトークンの文字列を追加し、新しいドキュメントを作成することができます削除されたトークン

ことなく、新しいドキュメントを構築します。 text_with_wsの詳細については、token docsを参照してください。

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

これはおそらく、あなたがが何をしたいあなたを与えるつもりされていない - 品詞は必ずしも同じにはなりません、そして得られた文は意味を成さないかもしれません。

あなたが念頭に置いていたものでなければ、私に知らせてください。おそらく私は助けることができます。

+0

私は2番目の解決策を認識しており、現時点では回避策を基本的に回避しています。しかし、それには2つの問題があります:1.あなたが正確に指し示すようにPoSタグが変わる可能性があります。2.文書を再解析してパフォーマンスを低下させる必要があります。 –

+0

文書を入手した後、文書で何をしたいのか説明できますか?なぜトークンを削除したいのですか? – polm23

関連する問題