2017-05-24 4 views
2

PythonのSpacyパッケージには、文をトークンにインテリジェントに分割する統計トークナイザがあります。私の質問は、私が後方に、すなわちトークンのリストからきれいにフォーマットされた文に行くことを可能にするパッケージがあるということですか?それはおそらく間隔、総額または収縮が適切な文で働くべきかを知るために、統計的/ルールベースの手順のいくつかの並べ替えを必要とするNLP reverse tokenizing(トークンからきれいにフォーマットされた文へ)

>>> toks = ['hello', ',', 'i', 'ca', "n't", 'feel', 'my', 'feet', '!'] 
>>> some_function(toks) 
"Hello, I can't feel my feet!" 

:基本的に、私は私が次の操作を行うことができます機能が欲しいです。

答えて

4

spaCy内では、いつも''.join(token.text_with_ws for token in doc)を使用して元の文字列を再構成できます。あなたが持っているものすべてが文字列のリストであるなら、本当に良い決定論的解決法はありません。あなたは、逆モデルを訓練したり、いくつかのおおよそのルールを使用することができます私はこのdetokenize()機能の良い汎用実装を知らない。

+0

I spaCyの 'token'オブジェクトにアクセスできます。私は、フォーマットされた文にトークンのリストを照合するdictを作成します。ありがとう! –

2

nltkは、このような脱ケネゼーションにある程度使用できます。あなたは、いくつかの後処理を行うか、正規表現を変更する必要があるが、ここではサンプルのアイデアですよ:

import re 
from nltk.tokenize.treebank import TreebankWordDetokenizer as Detok 
detokenizer = Detok() 
text = detokenizer.detokenize(tokens) 
text = re.sub('\s*,\s*', ', ', text) 
text = re.sub('\s*\.\s*', '. ', text) 
text = re.sub('\s*\?\s*', '? ', text) 

は句読点でより多くのエッジケースがありますが、これは非常に簡単で、わずかに良い' '.joinより

関連する問題