检测单词中的重音(Python)
这里是交易:我写了一个程序,可以在字典中找到所有的算法类。但是,我在处理重音字符时遇到了一个问题。目前,我的代码将它们读入,将它们视为不可见,但最后仍以“\xc3\?”的形式打印出某种替换代码。我想丢弃所有带有口音的单词,但我不知道如何检测它们 我尝试过的事情:检测单词中的重音(Python),python,regex,unicode,command-line,non-ascii-characters,Python,Regex,Unicode,Command Line,Non Ascii Characters,这里是交易:我写了一个程序,可以在字典中找到所有的算法类。但是,我在处理重音字符时遇到了一个问题。目前,我的代码将它们读入,将它们视为不可见,但最后仍以“\xc3\?”的形式打印出某种替换代码。我想丢弃所有带有口音的单词,但我不知道如何检测它们 我尝试过的事情: 检查类型是否为unicode 使用正则表达式检查包含“\xc3”的单词 解码/编码(我不完全理解unicode,但无论我尝试了什么都没用) 问题/问题:我需要找出如何检测重音,但我的程序将重音作为奇怪的“\xc3\?”字符打印到命令
- 检查类型是否为unicode
- 使用正则表达式检查包含“\xc3”的单词
- 解码/编码(我不完全理解unicode,但无论我尝试了什么都没用)
stop
tops
pots
hello
world
pit
tip
\xc3\xa9
sé
s
se
代码输出:
Found
\xc3\xa9
['pit', 'tip']
['world']
['s\xc3\xa9', 's']
['\\xc3\\xa9']
['stop', 'tops', 'pots']
['se']
['hello']
程序本身:
import re
anadict = {};
for line in open('fakedic.txt'):#/usr/share/dict/words'):
word = line.strip().lower().replace("'", "")
line = ''.join(sorted(ch for ch in word if word if ch.isalnum($
if isinstance(word, unicode):
print word
print "UNICODE!"
pattern = re.compile(r'xc3')
if pattern.findall(word):
print 'Found'
print word
if anadict.has_key(line):
if not (word in anadict[line]):
anadict[line].append(word)
else:
anadict[line] = [word]
for key in anadict:
if (len(anadict[key]) >= 1):
print anadict[key]
帮助?所以我的答案基本上是空白的。。。看看这里: 要点是,您可以检查每个字符,查看字符的
ord
是否小于128,这允许您检查它是否是重音字符。或者,您可以进行大量的尝试和捕捉,查找在重音字符处理过程中会抛出的unicode错误。(后者似乎更有效)
这对我来说无疑也是一次学习经历:)很抱歉花了这么长时间我最终使用了正则表达式(基本上是为了检查所有不是字母字符的东西):
这有助于我去掉任何带有\或任何其他数字或时髦符号的单词。虽然这不是一个完美的解决方案,但它确实起了作用。虽然它确实允许“打印”sé(显式)起作用,但不幸的是,它没有解决我提到的问题。我的程序仍然是sé->s\xc3\xa9,s\xc3\xa9和s是字谜;我将研究一下,你的程序仍然“思考sé->s\xc3\xa9”是什么意思?当它在字典中输入单词sé时,它会返回s\xc3\xa9作为一个字谜列表中的输出单词。S显然是S\xc3\xa9的一个字谜,而S\xc3\xa9最初是作为单词Sé输入的,但程序将其翻译得很奇怪。我已经更新了我的答案,希望它能引导您完成代码。我建议您阅读以下内容:
if re.match('^[a-zA-Z_]+$', word):