「1ディック1ジョン1本11異なる1a1異なる1を読む」のような頻度を示すテキストファイルがあります。これらの単語に対して定義された辞書もあります。dict={'a':1、'book':2 }
単語を辞書の値に置き換えたいと思います。誰かがこれがどのように行われるか教えてもらえますか?
「1ディック1ジョン1本11異なる1a1異なる1を読む」のような頻度を示すテキストファイルがあります。これらの単語に対して定義された辞書もあります。dict={'a':1、'book':2 }
単語を辞書の値に置き換えたいと思います。誰かがこれがどのように行われるか教えてもらえますか?
text = # your text here
dictionary = # your dictionary here (don't call it dict!)
' '.join(str(dictionary.get(word, word)) for word in text.split(' '))
簡単だ:
text = # your text here
for word in dictionary:
text = text.replace(word, str(dictionary[word]))
編集
部分文字列に関する問題については、正規表現を使用できます。
import re
text = # your text here
for word in dictionary:
text = re.sub('^|\s' + word + '\s|$', str(dictionary[word]) + ' ', text)
import re
text = # your text here
dictionary = # your dictionary here (don't call it dict!)
re.sub("\\b.+?\\b", lambda x: str(dictionary.get(*[x.group()]*2)), text)
を使用することもできますがre.sub
、置換引数として関数を指定します。
import re
frequencies = {'a': 1, 'book': 2}
input_string = "read 1 dick 1 john 1 book 1 read 1 different 1 a 1 different 1 "
def replace_if_found(m):
word = m.group(1)
return str(frequencies.get(word, word)) + m.group(2)
print re.sub(r'(\w+)( \d+)', replace_if_found, input_string)
...出力が得られます:
read 1 dick 1 john 1 2 1 read 1 different 1 1 1 different 1
そこにある利点は、1 つ以上の単語文字の後に 1 つ以上の数字が続く場所を置き換えるだけであるということです。