0

ダブルメタフォン機能をダウンロードしました:https ://github.com/dracos/double-metaphone

これは次のように機能するはずです。

>>> dm(u'aubrey')
('APR', '')
>>> dm(u'richard')
('RXRT', 'RKRT')
>>> dm(u'katherine') == dm(u'catherine')
True

この関数に変数を渡すにはどうすればよいですか?uは常に邪魔です。私はできる必要があります

dm(x)==dm(y)

今これが起こることです:

>>> x='wal mart'
>>> y='wall mart'
>>> dm(x)==dm(y)
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
dm(x)==dm(y)
File "<pyshell#18>", line 6, in dm
st = ''.join((c for c in unicodedata.normalize('NFD', st) if unicodedata.category(c) != 'Mn'))
TypeError: normalize() argument 2 must be unicode, not str
4

2 に答える 2

6

u''リテラル文字列オブジェクトの構文であり、Unicode文字を処理できることを除いてunicode通常のオブジェクトに相当します。str

>>> type('foobar')
<type 'str'>
>>> type(u'foobar')
<type 'unicode'>
>>> 'foobar' == u'foobar'
True

呼び出している関数が入力を受け入れる限り、は必要ありませんu。例えば:

x = u'richard'
dm(x)

unicode関数がオブジェクトを予期し、オブジェクトを渡しているため、TypeErrorを受け取りstrます。これらの行を変更します。

x='wal mart'
y='wall mart'

に:

x=u'wal mart'
y=u'wall mart'

オブジェクトを操作する場合は、コンストラクターを使用してオブジェクトをオブジェクトstrに変換できます。unicodeunicode()

x='wal mart'
y='wall mart'

dm(unicode(x)) == dm(unicode(y))
于 2012-10-10T15:48:38.273 に答える
3
a = u'katherine'
b = u'catherine'

dm(a) == dm(b)
于 2012-10-10T15:49:05.300 に答える