【问题标题】:Python : UTF-8 : How to count number of words in UTF-8 string?Python:UTF-8:如何计算 UTF-8 字符串中的单词数?
【发布时间】:2013-07-14 08:33:42
【问题描述】:

我需要计算 UTF-8 字符串中的单词数。即我需要编写一个python函数,它以“एक बार,एक कौआ, बहुत प्यासा, था”作为输入并返回7(字数)。

我尝试了如下所示的正则表达式“\b”。但结果不一致。

wordCntExp=re.compile(ur'\b',re.UNICODE);
sen='एक बार,एक कौआ, बहुत प्यासा, था';
print len(wordCntExp.findall(sen.decode('utf-8'))) >> 1;
12 

感谢对上述答案的任何解释或解决上述问题的任何其他方法。

【问题讨论】:

    标签: python string utf-8 hindi


    【解决方案1】:

    尝试使用:

    import re
    words = re.split(ur"[\s,]+",sen, flags=re.UNICODE)
    count = len(words)
    

    它将用空格和逗号分割单词。您可以在第一个参数中添加不被视为属于单词的字符的其他字符。

    inspired by this

    python re documentation

    【讨论】:

    • 感谢正则表达式。
    【解决方案2】:

    我对你的语言结构一无所知,但你不能简单地计算空格吗?

    >>> len(sen.split()) + 1
    7
    

    注意+ 1,因为有n - 1 空格。 [编辑为在任意长度的空间上分割-感谢@Martijn Pieters]

    【讨论】:

    • 在这种情况下,您将使用.split() 分割任意宽度的空白。但这行不通,因为在示例句子中是一个逗号,没有尾随空格,据我们所知,这在印地语中可能是允许的。
    • 我不能只依赖空格,因为单词之间可以有多个空格。 >>> sen='एक बार,एक कौआ, बहुत प्यासा, था'; >>> len(sen.split(" "))+1 8
    【解决方案3】:

    使用regex:

    >>> import regex
    >>> sen = 'एक बार,एक कौआ, बहुत प्यासा, था'
    >>> regex.findall(ur'\w+', sen.decode('utf-8'))
    [u'\u090f\u0915', u'\u092c\u093e\u0930', u'\u090f\u0915', u'\u0915\u094c\u0906', u'\u092c\u0939\u0941\u0924', u'\u092a\u094d\u092f\u093e\u0938\u093e', u'\u0925\u093e']
    >>> len(regex.findall(ur'\w+', sen.decode('utf-8')))
    7
    

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2014-03-12
      • 2017-06-16
      • 2023-03-27
      • 2017-03-04
      相关资源
      最近更新 更多