3

テキスト言語を英語に変換するこの関数があります。

def translate(string):
    textDict={'y':'why', 'r':'are', "l8":'late', 'u':'you', 'gtg':'got to go',
        'lol': 'laugh out    loud', 'ur': 'your',}
    translatestring = ''
    for word in string.split(' '):
        if word in textDict:
            translatestring = translatestring + textDict[word]
        else:
            translatestring = translatestring + word
    return translatestring

ただし、翻訳したい場合y u l8?は が返されwhyyoul8?ます。単語を返すときに単語を区切るにはどうすればよいですか? また、句読点はどのように処理すればよいですか? どんな助けでも大歓迎です!

4

5 に答える 5

2

ワンライナー理解:

''.join(textDict.get(word, word) for word in re.findall('\w+|\W+', string))

[編集] 正規表現を修正しました。

于 2011-06-05T03:13:46.653 に答える
0

スペースなしで文字列に単語を追加しています。この方法で物事を行う場合 (このトピックに関する以前の質問で提案された方法ではなく)、スペースを分割したため、スペースを手動で再追加する必要があります。

于 2011-06-05T02:45:40.697 に答える
0

" yu l8" を " " で分割すると、["y", "u", "l8"] が得られます。置換後、["why", "you", "late"] が得られ、スペースを追加せずにこれらを連結しているため、"whyyoulate" が得られます。if の両方のフォークにスペースを挿入する必要があります。

于 2011-06-05T02:46:57.043 に答える
0

a を追加するだけで+ ' ' +、スペースを追加できます。ただし、あなたがやろうとしていることは次のとおりだと思います。

import re

def translate_string(str):
    textDict={'y':'why', 'r':'are', "l8":'late', 'u':'you', 'gtg':'got to go',  'lol': 'laugh out loud', 'ur': 'your',}
    translatestring = ''
    for word in re.split('([^\w])*', str):
        if word in textDict:
            translatestring += textDict[word]
        else:
            translatestring += word

    return translatestring


print translate_string('y u l8?')

これは印刷されます:

why you late?

このコードは、元の意図を保持しながら、疑問符などをもう少し適切に処理し、入力文字列からスペースやその他の文字を保持します。

于 2011-06-05T02:49:38.573 に答える
0

このループを次のように置き換えることをお勧めします。

for word in string.split(' '):
    if word in textDict:
        translatestring = translatestring + textDict[word]
    else:
        translatestring = translatestring + word

for word in string.split(' '): translatetring += textDict.get(word, word)

は辞書dict.get(foo, default)を調べて、まだ定義されていない場合に使用します。foodefaultfoo

(実行する時間、短いメモ: 分割するとき、句読点と空白に基づいて分割し、句読点または空白を保存し、出力文字列を結合するときに再導入できます。もう少し作業が必要ですが、仕事を成し遂げます。)

于 2011-06-05T02:51:43.850 に答える