これは、ステミングに辞書を適用する方法です。 d={'nada.*':'nadas', 'mila.*':'milas'}
私はこのコードをstemmトークンに書きましたが、それはTOO SLOWを実行するので、終了する前に停止しました。私はそれが問題だと思います.Dictが大きく、トークンがたくさんあるからです。 したがって、コードをnormalyで実行できるように、私はどのように私のステム辞書を実装できますか? nltkパッケージでカスタムディクテーションを適用する方法を見つけようとしましたが、見つからなかった。文字列を辞書からの値で置き換えるコードが必要
#import stem dict
d = {}
with open("Stem rečnik.txt") as f:
for line in f:
key, val = line.split(":")
d[key.replace("\n","")] = val.replace("\n","")
#define tokenizer
def custom_tokenizer(text):
#split- space
tokens = nltk.tokenize.word_tokenize(text)
#stemmer
for i, token in enumerate(tokens):
for key, val in d.items():
if re.match(key, token):
tokens[i] = val
break
return tokens
辞書サンプル:
bank.{1}$:banka
intes.{1}$:intesa
intes.{1}$:intesa
intez.{1}$:intesa
intezin.*:intesa
banke:banka
banaka:banka
bankama:banka
post_textサンプル:あなたの幹のdictのキーは正規表現であるが、彼らはすべてのいくつかの特定の文字の短い文字列で始まること
post_text = [
'Banca intesa #nocnamora',
'Banca intesa',
'banka haosa i neorganizovanosti!',
'Cucanje u banci umesto setnje posle rucka.',
"Lovin' it #intesa'"
]
これを[mcve]にするには 'd'を指定してください。なぜ文字列マッチングの代わりに 're.match'を使うのですか?それとも、もっとうまくいっていますか? 'token in d'がO(n)ではなくO(1)時間内に検索するかどうかをチェックします。 –
これは、キーが正規表現だからです。ああ、それは素晴らしいことです、私は今どのように動作するかをチェックします...あなたがdのトークンを検索する方法を教えてもらえますか?dは私が書いたようにペアのリストです。 –
あなたのために 'd'を定義するコードを提供しました。しかし、それは我々が見ることができないファイルを読み取ります。ファイル参照を忘れて辞書の直接定義を提供するか、そのファイルの内容を提供する必要があります。また、 'custom_tokenizer'関数に渡す' text'のサンプルを提供する必要があります。この方法で[** MCVE **](http://stackoverflow.com/help/mcve)を考えると、あなたが提供したコードをコピーして私のシステムに貼り付けて実行する必要があります。あなたが見ることができない情報への参照があれば、それは実行されません。 – piRSquared