【问题标题】:Normalizing unicode in dataset规范化数据集中的 unicode
【发布时间】:2019-03-27 21:48:51
【问题描述】:

目前我的代码如下:

import unicodedata
unicode = open("unicode.txt").read()
unicode = unicodedata.normalize('NFKC', unicode)
print(unicode)

其中unicode.txt 是一个文本文件,简单地读取\u00e9

当我运行程序时,输出仍然是\u00e9,但是,如果我将.normalize 行中的unicode 替换为\u00e9,则输出是é

最终目标只是用常规字符替换所有 unicode 字符串(例如 \u00e9)。喜欢cafe 而不是café

将字符串输入到函数中时,规范化函数似乎可以正常工作,但在要打开的文件中时却不行。即使这样,它似乎也返回了程式化的é,而不是普通的e

有什么办法可以做到吗?

【问题讨论】:

  • 我不太确定:您要进行哪种转换? a) \u00e9é, b) ée, c) \u00e9e?马克的回答可以帮助您 a)。转换 b) 称为音译(不是规范化),unidecode 包可以帮助您。对于 c),结合 a) 和 b)。

标签: python unicode normalize


【解决方案1】:

文件的内容实际上是六个字符:\u0029'\u0029' 键入的代码是单个 Unicode 代码点,表示为转义码:

>>> print('\u00e9')   # A single character escape code
é
>>> print(r'\u0039')  # A six-character string using raw string notation.
\u0039                # Escape codes are ignored and characters are literal.
>>> print('\\u0039')  # A six-character string using an escaped backslash
\u0039                # to indicate a literal backslash.

要将六字符的字符串转换为字符,请使用以下内容,

>>> r'\u00e9'.encode('ascii').decode('unicode-escape')
'é'

ascii 编码用于将 ASCII 字符的 Unicode 字符串转换为字节字符串,因为您只能在 Python 3 中解码字节字符串。Python 2 可以跳过它,因为它会在需要时将 Unicode 字符串隐式编码回 ASCII。
您也可以直接从文件中读取它(假设是 Python 3),使用:

with open('unicode.txt',encoding='unicode-escape') as f:
    data = f.read()

在 Python 2 上使用 import ioio.open

【讨论】:

    【解决方案2】:

    我猜你可以把它改成 readline() 或 readlines()。 代码是:

    import unicodedata
    unicode = open("unicode.txt", 'r')
    for ln in unicode.readlines():
        ln = unicodedata.normalize('NFKC', ln)
        print(ln)
    

    原因是因为 read() 会分别处理文件中的每个字符,这意味着迭代会针对每个字符进行。同时,readline 或 readlines() 会处理一行或整行的迭代。

    然而,unicodedata 试图规范化字符串中的 unicode,而不是按字符。希望这会有所帮助。

    参考资料: https://www.tutorialspoint.com/what-are-the-differences-between-readline-and-readlines-in-selenium-with-python https://discuss.codecademy.com/t/what-is-difference-between-read-and-readlines-in-python/478934

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 2015-08-21
      • 2020-05-29
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多