0

我已经下载了双变音功能:https ://github.com/dracos/double-metaphone

它应该像这样工作:

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

如何将变量传递给该函数?你总是在路上。我需要能够做到

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)

您收到 TypeError 是因为该函数需要unicode对象并且您正在向它传递str对象。更改这些行:

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

至:

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

如果您将使用str对象,那么您可以unicode使用unicode()构造函数将它们转换为对象:

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 回答