我需要我的代码在单词结尾处识别希伯来语中的特定字母,然后将其替换为最终字母。
例如:כ=ך,מ=ם,נ=ן,פ=ף,צ=ץ。
我尝试使用以下代码执行此操作:
# -*- coding: utf-8 -*-
from string import maketrans
text = "לנמנמ זה כיפ"
textSplit = text.split()
translator = maketrans("כמנפצ","ךםןףץ")
correctSpelling = ""
for i in textSplit:
if i[-1]=="כ" or i[-1]=="מ":
correctSpelling += i.translate(translator) + " "
else:
correctSpelling += i + " "
print correctSpelling
输出:לנמנמזהכיפ。
预期产出:לנמנםזהכיף。
上述代码没有错误
在阅读Unicode HOWTO,Overcoming frustration: Correctly using unicode in python2和绝对最低每个软件开发人员之后,绝对必须知道Unicode和字符集(没有借口!)是时候问一下stackoverflow了。
答案 0 :(得分:1)
您使用的是错误的数据类型。在Python 2中,字符串(如'abc'
)用于字节,而unicode(如u'abc'
)用于文本。
所以:
# wrong (putting unicode characters in byte literals is ill-defined):
ord("צ");
# correct:
ord(u"צ");
(Python 3颠倒了这一点,'abc'
是unicode,字节有一个明确的b
前缀)
答案 1 :(得分:1)
答案是在任何地方使用Unicode字符串,以及将Unicode序列映射到Unicode序列的Unicode转换表。该版本适用于Python 2.7和Python 3.3 +。
# -*- coding: utf-8 -*-
from __future__ import print_function
text = u"לנמנמ זה כיפ"
textSplit = text.split()
translator = {ord(a):ord(b) for a,b in zip(u"כמנפצ",u"ךםןףץ")}
correctSpelling = u""
print(u"כפצנמ".translate(translator)) #just a test for the translator
for i in textSplit:
if i[-1]==u"כ" or i[-1]==u"מ" or i[-1]==u"נ" or i[-1]==u"פ" or i[-1]==u"צ":
correctSpelling += i[:-1] + i[-1].translate(translator) + u" "
else:
correctSpelling += i + " "
print(correctSpelling)
输出:
ךףץןם
לנמנם זה כיף
答案 2 :(得分:1)
使用Unicode字符串表示文本。
这是一个Python 2/3兼容源代码,使用正则表达式将最后一个字母替换为最终字母:
Array#last
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import re
text = "לנמנמ זה כיפ"
final_letters = dict(zip(map(ord, "כמנפצ"),"ךםןףץ"))
print(re.sub(r'\w\b', lambda m: m.group().translate(final_letters), text,
flags=re.UNICODE))
尽管出现了这些代码,但代码仍有效(可能是一些从右到左的相关问题)。
答案 3 :(得分:-1)
经过几次修补我的代码(读:小时)后,我发现了问题所在
显然我的代码中有两件事是错的:首先我假设编码已经是utf-8,其次我认为.translate(翻译器)可以使用unicode数据类型。
为了解决第一个问题,我添加了这个位:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
之后我将文本更改为unicode数据类型(而不是str)并修改了一些代码:
if i[-1]=="כ" or i[-1]=="מ" or i[-1]=="נ" or i[-1]=="פ" or i[-1]=="צ":
correctSpelling += i[:-1] + str(i[-1]).translate(translator) + " "
以下是修改后的完整代码:
# -*- coding: utf-8 -*-
from string import maketrans
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#the text is of data type unicode
text = u"לנמנמ זה כיפ"
textSplit = text.split()
translator = maketrans("כמנפצ","ךםןףץ")
correctSpelling = ""
print "כפצנמ".translate(translator) #just a test for the translator
for i in textSplit:
if i[-1]=="כ" or i[-1]=="מ" or i[-1]=="נ" or i[-1]=="פ" or i[-1]=="צ":
correctSpelling += i[:-1] + str(i[-1]).translate(translator) + " "
else:
correctSpelling += i + " "
print correctSpelling
输出:
ךףץןם
לנמנם זה כיף