我想将一个句子拆分成一个单词列表。
对于英语和欧洲语言,这很简单,只需使用 split()
>>> "This is a sentence.".split()
['This', 'is', 'a', 'sentence.']
但我还需要处理中文等不使用空格作为单词分隔符的语言的句子。
>>> u"这是一个句子".split()
[u'\u8fd9\u662f\u4e00\u4e2a\u53e5\u5b50']
显然那是行不通的。
如何将这样的句子拆分为单词列表?
更新:
到目前为止,答案似乎表明这需要自然语言处理技术,而且中文的词界是模糊的。我不确定我明白为什么。汉语中的边界这个词对我来说似乎非常明确。每个中文单词/字符都有一个对应的 unicode,并在屏幕上显示为一个单独的单词/字符。
那么歧义从何而来。正如您在我的 Python 控制台输出中看到的那样,Python 可以毫无问题地判断我的例句由 5 个字符组成:
这 - u8fd9
是 - u662f
一 - u4e00
个 - u4e2a
句 - u53e5
子 - u5b50
很明显,Python 可以毫无问题地分辨单词/字符的边界。我只需要列表中的那些单词/字符。
最佳答案
您可以做到这一点,但不能使用标准库函数。正则表达式也帮不了你。
您描述的任务是名为 Natural Language Processing 的字段的一部分(自然语言处理)。在单词边界处拆分中文单词方面已经做了很多工作。我建议您使用这些现有解决方案中的一种,而不是尝试推出自己的解决方案。
Where does the ambiguity come from?
你列出的是汉字。这些大致类似于英语中的字母或音节(但与评论中指出的 NullUserException 不完全相同)。字符边界的位置没有歧义 - 这是非常明确的。但是您要求的不是字符 边界,而是单词 边界。中文单词可以由多个字符组成。
如果您只想找到字符,那么这非常简单,不需要 NLP 库。只需将消息解码为 unicode 字符串(如果尚未完成),然后调用内置函数 list
将 unicode 字符串转换为列表。这将为您提供字符串中字符的列表。对于您的具体示例:
>>> list(u"这是一个句子")
关于python - 如何在不使用空格作为单词分隔符的语言(如中文)上执行 Python split()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3797746/