あるソース言語 (入力ファイル) からターゲット言語 (ターゲット ファイル) への音訳を行っているので、ソース コードの辞書で同等のマッピングをチェックしています。ソース コードの特定の文字には、次のような同等のマッピングがありません。コンマ (,) およびその他すべての特殊記号。文字が同等のマッピングを持つ辞書に属しているかどうかを確認し、辞書に同等のマッピングがないターゲットファイルに出力される特殊記号を処理するにはどうすればよいですか。ありがとうございました:)。
5 に答える
あなたの別の質問への回答で私が推奨したように、Unicode オブジェクトのメソッドを使用する場合translate
、すべてがあなたの望むとおりに自動的に行われます:c
コードポイント ( ord(c)
) が文字変換辞書にない各 Unicode 文字は、単に入力から変更されずに渡されます。必要に応じて出力します。なぜ車輪を再発明するのですか?
rules
文字を音訳された同等のものにマッピングすることを考えると、私の推奨事項は次のとおりです。
results = []
for char in source_text:
results.append(rules.get(char, char))
return ''.join(results) # turns the list back into a string
dict のget
メソッドは、キーの値またはキーが存在しない場合のデフォルト値のいずれかを返します。通常、デフォルト値は ですNone
が、この場合、デフォルト値 (2 番目の引数) と同じ文字を指定したため、キーが見つからない場合は、それ自体が返されます。
ジェネレータ式を使用してこれを記述するよりコンパクトな方法は、次のようになります。
''.join((rules.get(char, char) for char in source_text))
私はあなたがこのようなものが欲しいと思います:
tokenMapping = {"&&" : "and"}
for token in source file: # <-- pseudocode
translatedToken = tokenMapping[token] if token in tokenMapping else "transliteration unknown"
辞書に翻訳がある場合 (例: "&&" -> "and")、それを使用します。それ以外の場合は、「音訳不明」に変換されます。
それが役に立ったことを願っています。
編集: LeafStorm が示唆したように、辞書のget
関数を使用して上記のコードを簡略化できます。ループ内のコード行は次のようになります
translatedToken = tokenMapping.get(token, "transliteration unknown")
dictx = {}
for itm in my_source :
dictx[itm] = dictx.get(itm, 0) + 1
私はあなたの質問の詳細を完全には理解していませんでしたが、これが私が考えることができる最も簡単な例であり、あなたが求めていると思うパターンを示しています。
私が信じる「get」メソッドはあなたが望むものです。辞書からキーを取得できますが、キーがない場合は、デフォルト値を設定できます。つまり、「dictx [itm](キー'itm'に割り当てられた値)が必要ですが、' itm'は辞書にないので、それと値を作成します。'
このスニペットは、ソースドキュメント('my_source')をループし、その中のさまざまなアイテムの頻度をカウントし、それらのカウントをすでにディクショナリにあるキーに値として追加しますが、キーが存在しないアイテムに到達すると、例外がスローされ、キーが追加され、値「0」が割り当てられます。
これはかなり簡単に思えます。辞書が char to char の場合、次のようにします。
outstr = ''
for ch in instr:
if ch in mydict:
outstr += mydict[ch]
else:
outstr += ch
ここで、instr は入力文字列で、mydict には文字から文字へのマッピングが含まれています。
単語の一部を確認したい場合は、単語に含まれる文字を含む辞書と単語を含む辞書の 2 つの辞書を使用することをお勧めします。次のように使用できます。
outstr = ''
word = ''
for ch in instr:
if ch in chardict:
word += ch
else:
if len(word):
if word in worddict:
outstr += worddict[word]
else:
outstr += word
word = ''
outstr += ch
if len(word):
outstr += worddict[word]
else:
outstr += word
たとえば、chardict にはすべてのアルファベットが含まれる場合があります。もちろん、いくつかの部分を少し異なる方法で実行したい場合もあります (chardict 以外のものを使用して、char が有効な単語の一部と見なされるかどうかを確認するなど、おそらくバイナリ検索を使用したもの)。 .