私は実際の英語でスラング語とその代用品のリストを含むテキストファイルを持っています。私はスプリットポイントとして ":"を使用してこのテキストファイルを辞書に変換し、変換後に辞書を印刷するとすべてが問題なく表示されます。エラー:位置に何も繰り返しません
ただし、この行に由来するエラー:slangs_re = re.compile('|'.join(slang_dict.keys()))
はnothing to repeat at position 112207
と表示されます。
デバッグ中に、エラーが何らかの形で辞書にリンクされていることがわかりました。これは、下のコードを実行したときに正しい出力が得られなかったためですが、エラーも発生しなかったためです。このコードの予想される出力は「フィットネス」ですが、実際の出力は「フィット」です。
import re
test = "fitess"
slang_dict = {"fitess":"fitness", "damm":"damn"}
slangs_re = re.compile('|'.join(slang_dict.keys()))
def correct_slang(s, slang_dict=slang_dict):
def replace(match):
return slang_dict[match.group(0)]
return slangs_re.sub(replace, s)
test = correct_slang(test)
print(test)
は、そして、これは辞書とのコードです(申し訳ありませんが、テキストファイルが含まれるには大きすぎる。サンプルがhere利用可能です)。期待される出力は「フィットネス」であるが、実際の出力はエラーです:
import re
test = "fitess"
file = open("slang_conversion.txt","r")
slang_dict = {}
for line in file:
x = line.split(":")
a = x[0]
b = x[1]
c = len(b) - 1
b = b[0:c]
slang_dict[a] = b
slangs_re = re.compile('|'.join(slang_dict.keys())) # <-- error
def correct_slang(s, slang_dict=slang_dict):
def replace(match):
return slang_dict[match.group(0)]
return slangs_re.sub(replace, s)
test = correct_slang(test)
print(test)
他のSOスレッドを読めば、私はそれはいくつかの例のバグだということを知るようになったが、1つではないようですこの場合。
は私がslangs_re = re.compile(r"(?<!\w){}(?!\w)".format('|'.join([re.escape(x) for x in slang_dict])))
で
slangs_re = re.compile('|'.join(slang_dict.keys()))
を交換することをお勧め
'slang_dict.keys()にregexメタ文字(' * '、' + 'など)が含まれている場合、それらをエスケープする必要があります。 – Tushar
おそらく、あなたは 'r"(?<!\ w){}(?!\ w) "で修正することができます。 ()])) 'あるいは、すべての単語が文字、数字、 '_ 'で構成されている場合は、' \ w + 'パターンを使用して、値を取得する前にそのキーが辞書に存在するかどうかを確認することさえできます。 –
さらに、 'contractions_re'は' slangs_re'に置き換えなければなりません。 https://ideone.com/VVR3keを参照してください –