【问题标题】:Split word containing unicode character包含 unicode 字符的拆分词
【发布时间】:2016-06-12 00:04:19
【问题描述】:

我正在从事一个涉及推文中表情符号的 NLP 项目。

此处给出了推文示例:
"sometimes i wish i wa an octopus so i could slap 8 people at once????"

我的问题是 once???? 被认为是一个词,所以我想把这个唯一的词分成两个,这样我的推文看起来像这样:
"sometimes i wish i wa an octopus so i could slap 8 people at once ????"

请注意,我已经编译了包含每个表情符号的正则表达式!

我正在寻找一种有效的方法,因为我有数十万条推文,但我不知道从哪里开始。

谢谢

【问题讨论】:

    标签: python regex python-3.x unicode


    【解决方案1】:

    您可以使用re.sub 引入空格:

    re.sub(r'(\W+)(?= |$)', r' \1', string)
    

    示例:

    >>> string
    'sometimes i wish i wa an octopus so i could slap 8 people at once\xf0\x9f\x90\x99'
    >>> re.sub(r'(\W+)(?= |$)', r' \1', string)
    'sometimes i wish i wa an octopus so i could slap 8 people at once \xf0\x9f\x90\x99'
    
    >>> string = 'sometimes i wish i wa an octopus so i could slap 8 people at once?" foobar'
    >>> re.sub(r'(\W+)(?= |$)', r' \1', string)
    'sometimes i wish i wa an octopus so i could slap 8 people at once \xf0\x9f\x90\x99 foobar'
    

    【讨论】:

      【解决方案2】:

      你就不能这样做吗:

      >>> import re
      >>> s = "sometimes i wish i wa an octopus so i could slap 8 people at once?"
      >>> re.findall("(\w+|[^\w ]+)",s)
      ['sometimes', 'i', 'wish', 'i', 'wa', 'an', 'octopus', 'so', 'i', 'could', 'slap', '8', 'people', 'at', 'once', '?']
      

      如果您再次需要它们作为单个空格分隔的字符串,只需加入它们:

      >>> " ".join(re.findall("(\w+|[^\w ]+)",s))
      'sometimes i wish i wa an octopus so i could slap 8 people at once ?'
      

      编辑:已修复。

      【讨论】:

      • 感谢您的快速回答,您能向我解释一下正则表达式如何找到实际单词和 unicode 字符之间的边界吗?
      • @ThomasReynaud 它首先尝试匹配一系列单词字符(\w),没有表情符号属于该类。一旦匹配到"once",匹配就会停止,因为它无法匹配更多的单词字符。所以从那个位置开始,它会搜索下一个匹配,只是试图找到不是空格字符的 anything。其实这个方法是有缺陷的,如果 emoji 不是在最后,我想,让我再测试一下。
      • @ThomasReynaud 我稍微改变了正则表达式。它现在要么匹配单词字符序列,要么匹配任何既不是空格也不是单词字符的序列。
      • 谢谢!太专注于使用我的表情符号正则表达式,我错过了简单的解决方案。对于未来的读者来说,这只是一个注释(在我的情况下根本不重要),这不会将 "???" 解析为 "? ? ?"
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多