Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测单词中的重音(Python)_Python_Regex_Unicode_Command Line_Non Ascii Characters - Fatal编程技术网

检测单词中的重音(Python)

检测单词中的重音(Python),python,regex,unicode,command-line,non-ascii-characters,Python,Regex,Unicode,Command Line,Non Ascii Characters,这里是交易:我写了一个程序,可以在字典中找到所有的算法类。但是,我在处理重音字符时遇到了一个问题。目前,我的代码将它们读入,将它们视为不可见,但最后仍以“\xc3\?”的形式打印出某种替换代码。我想丢弃所有带有口音的单词,但我不知道如何检测它们 我尝试过的事情: 检查类型是否为unicode 使用正则表达式检查包含“\xc3”的单词 解码/编码(我不完全理解unicode,但无论我尝试了什么都没用) 问题/问题:我需要找出如何检测重音,但我的程序将重音作为奇怪的“\xc3\?”字符打印到命令

这里是交易:我写了一个程序,可以在字典中找到所有的算法类。但是,我在处理重音字符时遇到了一个问题。目前,我的代码将它们读入,将它们视为不可见,但最后仍以“\xc3\?”的形式打印出某种替换代码。我想丢弃所有带有口音的单词,但我不知道如何检测它们

我尝试过的事情:

  • 检查类型是否为unicode
  • 使用正则表达式检查包含“\xc3”的单词
  • 解码/编码(我不完全理解unicode,但无论我尝试了什么都没用)
问题/问题:我需要找出如何检测重音,但我的程序将重音作为奇怪的“\xc3\?”字符打印到命令行上,这不是程序处理它们的方式,因为我无法找到任何包含“\xc3\?”的单词,尽管这些字符被打印到命令行上

示例:sé->s\xc3\xa9以及sé和s被我的程序视为字谜

测试字典:

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):