【问题标题】:Detecting accents in words (Python)检测单词中的重音符号(Python)
【发布时间】:2014-03-17 15:04:20
【问题描述】:

这里是dealio:我编写了一个程序来查找字典中的所有算法类。但是,我在处理重音字符时遇到了问题。目前我的代码将它们读入,将它们视为不可见,但仍会在末尾以 '\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]

帮助?

【问题讨论】:

标签: python regex unicode command-line non-ascii-characters


【解决方案1】:

所以基本上草草了我的答案......看看这里:

How to check if a string in Python is in ASCII?

要点是您可以检查每个字符以查看字符的ord 是否小于128,从而可以检查它是否为重音字符。或者你可以做很多尝试和捕捉,寻找会在重音字符中抛出的 unicode 错误。 (后者似乎是更有效的答案)

这对我来说绝对是一次学习体验 :) 抱歉花了这么长时间

【讨论】:

  • 虽然这确实允许 'print "sé"'(显式)工作,但不幸的是它没有解决我提到的问题。我的程序仍然是 sé -> s\xc3\xa9,而 s\xc3\xa9 和 s 是字谜。
  • 好的,我明白你现在在说什么了;我会调查一下
  • 你的程序仍然'thinks sé -> s\xc3\xa9'是什么意思?
  • 当它在字典中输入单词 sé 时,它返回 s\xc3\xa9 作为字谜列表中的输出单词。 S 显然是 s\xc3\xa9 的字谜,而 s\xc3\xa9 最初是作为单词 sé 输入的,但程序翻译得很奇怪。
  • 我已经更新了我的答案,希望它能引导你完成你的代码
【解决方案2】:

我最终使用了正则表达式(基本上是为了检查不是字母字符的所有内容):

if re.match('^[a-zA-Z_]+$', word):

这帮助我去掉了任何包含 \ 或任何其他数字或时髦符号的单词。这不是一个完美的解决方案,但它确实有效。

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 2010-11-28
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2022-12-14
    相关资源
    最近更新 更多