23
4

5 に答える 5

4

unidecodeパッケージの上にビルドできます。

最初にすべてのユニコードを結合された形式に正規化し、次にユニコードがそれをどのように変換するかを確認しようとしているため、これはかなり遅いです。ラテン文字に一致する場合、実際には元の NFC 文字を使用します。そうでない場合は、デガーブリング unidecode が示唆するものは何でも生成します。これにより、強調された文字だけが残りますが、他のすべてが変換されます。

import unidecode
import unicodedata
import re

def char_filter(string):
    latin = re.compile('[a-zA-Z]+')
    for char in unicodedata.normalize('NFC', string):
        decoded = unidecode.unidecode(char)
        if latin.match(decoded):
            yield char
        else:
            yield decoded

def clean_string(string):
    return "".join(char_filter(string))

print(clean_string(u"vis-à-vis “Beyoncé”’s naïve papier–mâché résumé"))
# prints vis-à-vis "Beyoncé"'s naïve papier-mâché résumé
于 2017-09-04T17:45:18.743 に答える
1

str.translate() メソッド ( http://docs.python.org/library/stdtypes.html#str.translate ) を使用できます。ただし、Unicode に関連するドキュメントを読んでください。変換テーブルには別の形式があります。Unicode の序数 --> Unicode 文字列 (通常は char) または None です。

ええと、しかしそれには口述が必要です。とにかく代替品をキャプチャする必要があります。テーブルや配列なしでそれをどのように行いたいですか? 単一の文字に str.replace() を使用できますが、これは非効率的です。

于 2012-04-24T10:01:59.477 に答える
-1

このツールは、マークダウンの句読点を正規化します: http://johnmacfarlane.net/pandoc/README.html

-S, --smart ストレート クォーテーションをカーリー クォーテーションに、--- EM ダッシュに、--- エン ダッシュに、そして ... を省略記号に変換して、タイポグラフィ的に正しい出力を生成します。「Mr.」などの特定の略語の後に、改行なしのスペースが挿入されます。(注: このオプションは、入力形式がマークダウンまたはテキスタイルの場合にのみ重要です。入力形式がテキスタイルの場合、または出力形式がラテックスまたはコンテキストの場合、自動的に選択されます。)

Haskellなので、インターフェースを理解する必要があります。

于 2012-04-24T08:36:51.097 に答える