2016-06-22 20 views
0

私は、ポルトガル語のアクセント付き文字をPythonで置き換えようとしています。Pythonの単語のアクセント付きの文字を置き換えます。

accentedLetters = ['à', 'á', 'â', 'ã', 'é', 'ê', 'í', 'ó', 'ô', 'õ', 'ú', 'ü'] 
letters   = ['a', 'a', 'a', 'a', 'e', 'e', 'i', 'o', 'o', 'o', 'u', 'u'] 

したがって、accentedLettersはletters配列の文字に置き換えられます。このようにして

、私の期待される結果は、たとえば、次のとおりです。

ação => açao 
frações => fraçoes 

はどのように私はそれを行うことができますか?

+0

あなたのPythonのバージョンは何ですか?現在のコードで何が問題になっていますか? – Kasramvd

+0

あなたにエラーが発生しましたか?間違った出力?あなたはあなたのコードを "検証"したいだけですか?あなたの質問は何ですか? – Blorgbeard

+1

正規表現はこのプログラムでは過剰です - pythonの 'string.replace()'組み込み関数を使うword = word.replace(al、letters [i]) ' – Delioth

答えて

5

簡単な翻訳辞書がそのトリックを行う必要があります。各手紙について、その手紙が辞書にあればその翻訳を使用してください。それ以外の場合は、オリジナルを使用してください。個々の文字を単語に戻して結合します。

def removeAccents(word): 
    repl = {'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 
      'é': 'e', 'ê': 'e', 
      'í': 'i', 
      'ó': 'o', 'ô': 'o', 'õ': 'o', 
      'ú': 'u', 'ü': 'u'} 

    new_word = ''.join([repl[c] if c in repl else c for c in word]) 
    return new_word 
+0

' repl = ['それは' repl = {'ではありませんか? –

+0

@ジョンゴードン - これは中括弧です。ありがとう。 – Prune

+0

それは私のために働いていません。しかし、私はそれを行う方法を見つけました。 – Fernando

1

Python3のUnidecodeライブラリを表示できます。

例えば:

from unidecode import unidecode 

a = ['à', 'á', 'â', 'ã', 'é', 'ê', 'í', 'ó', 'ô', 'õ', 'ú', 'ü'] 

for k in a: 
    print (unidecode(u'{0}'.format(k))) 

結果:

電子 電子 私 O O O U U

0

私は最終的に持っています私のproblを解決em:

#! /usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 

def removeAccents(word): 
    replaceDict = {'à'.decode('utf-8'): 'a', 
        'á'.decode('utf-8'): 'a', 
        'â'.decode('utf-8'): 'a', 
        'ã'.decode('utf-8'): 'a', 
        'é'.decode('utf-8'): 'e', 
        'ê'.decode('utf-8'): 'e', 
        'í'.decode('utf-8'): 'i', 
        'ó'.decode('utf-8'): 'o', 
        'ô'.decode('utf-8'): 'o', 
        'õ'.decode('utf-8'): 'o', 
        'ú'.decode('utf-8'): 'u', 
        'ü'.decode('utf-8'): 'u'} 

    finalWord = '' 
    for letter in word: 
     if letter in replaceDict: 
      finalWord += replaceDict[letter] 
     else: 
      finalWord += letter 
    return finalWord 


word = (sys.argv[1]).decode('utf-8') 
print removeAccents(word) 

これはちょうど期待どおりに機能します。

+0

'+ ='をconcat文字列に使用するのはあまり効率的ではありません。 '' '.join(finalChars) 'を使うのが良いです。' 'finalChars''は' [] 'で始まり、文字を集めます。 –

0

正規表現を使用して別の簡単なオプション:

import re 

def remove_accents(string): 
    if type(string) is not unicode: 
     string = unicode(string, encoding='utf-8') 

    string = re.sub(u"[àáâãäå]", 'a', string) 
    string = re.sub(u"[èéêë]", 'e', string) 
    string = re.sub(u"[ìíîï]", 'i', string) 
    string = re.sub(u"[òóôõö]", 'o', string) 
    string = re.sub(u"[ùúûü]", 'u', string) 
    string = re.sub(u"[ýÿ]", 'y', string) 

    return string 
関連する問題