【问题标题】:Unicode object to a listUnicode 对象到列表
【发布时间】:2016-10-15 09:46:14
【问题描述】:

我有一个 utf8 - 可以在 Python 2.7 中轻松阅读的文本语料库:

sentence = codecs.open("D:\\Documents\\files\\sentence.txt", "r", encoding="utf8")
sentence = sentence.read()

> This is my sentence in the right format

但是,当我将此文本语料库传递给列表时(例如,用于标记化):

tokens = sentence.tokenize()

并在笔记本上打印,我得到了类似比特的字符,比如:

(u'\ufeff\ufeffFaux,', u'Tunisie')
(u'Tunisie', u"l'\xc9gypte,")

而我想要普通字符,就像我原来的导入一样。

所以我的问题是:我怎样才能将 unicode 对象传递给一个列表而没有奇怪的位/ASCII 字符?

【问题讨论】:

    标签: python python-2.7 unicode nltk python-unicode


    【解决方案1】:

    这一切都取决于你print。 Python 2 使用纯 ASCII 字符显示列表,并用反斜杠转义码代替非 ASCII 字符。这是为了便于查看普通打印会使隐藏的字符变得不可见,例如您在字符串中看到的双字节顺序标记 (BOM) \ufeff。打印单个字符串项将正确显示它们。

    很多例子

    原始字符串:

    >>> s = (u'\ufeff\ufeffFaux,', u'Tunisie')
    >>> t = (u'Tunisie', u"l'\xc9gypte,")
    

    在交互式提示下显示:

    >>> s
    (u'\ufeff\ufeffFaux,', u'Tunisie')
    >>> t
    (u'Tunisie', u"l'\xc9gypte,")
    >>> print s
    (u'\ufeff\ufeffFaux,', u'Tunisie')
    >>> print t
    (u'Tunisie', u"l'\xc9gypte,")
    

    从元组中打印单个字符串:

    >>> print s[0]
    Faux,
    >>> print s[1]
    Tunisie
    >>> print t[0]
    Tunisie
    >>> print t[1]
    l'Égypte,
    >>> print ' '.join(s)
    Faux, Tunisie
    >>> print ' '.join(t)
    Tunisie l'Égypte,
    

    一种不使用转义码打印元组的方法:

    >>> print "('"+"', '".join(s)+"')"
    ('Faux,', 'Tunisie')
    >>> print "('"+"', '".join(t)+"')"
    ('Tunisie', 'l'Égypte,')
    

    【讨论】:

      【解决方案2】:

      嗯,codecs.open(...) 返回一个“底层文件对象的包装版本”,然后你用对该对象执行 read 方法的结果覆盖这个变量。勇敢,令人恼火-但还可以;-)

      当您在“笔记本”中输入 äöüß 时,它会显示为“this”还是您看到的是 \uxxxxx

      codecs.open(...) 的默认值是errors=strict,所以如果这是所有样本的相同环境,这应该可以工作。

      我明白,当你写“打印它”时,你会打印列表,这与打印列表的内容不同。

      示例(将键入为 \t 的选项卡转换为普通的“字节”字符串 - 这是 python 2.7.11):

      >>> a="\t"
      >>> print a  # below is an expanded tab
      
      >>> a
      '\t'
      >>> [a]
      ['\t']
      >>> print [a]
      ['\t']
      >>> for element in [a]:
      ...     print element
      ... 
      
      >>> # above is an expanded tab
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多