python - 如何在不使用空格作为单词分隔符的语言(如中文)上执行 Python split()?

标签 python string unicode nlp cjk

我想将一个句子拆分成一个单词列表。

对于英语和欧洲语言,这很简单,只需使用 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 库。只需将消息解码为 un​​icode 字符串(如果尚未完成),然后调用内置函数 list 将 unicode 字符串转换为列表。这将为您提供字符串中字符的列表。对于您的具体示例:

>>> list(u"这是一个句子")

关于python - 如何在不使用空格作为单词分隔符的语言(如中文)上执行 Python split()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3797746/

相关文章:

Python子类元组对象能够在内部重新实例化自身

java - 如何检查数组是否包含字符串中的特定单词并获取它?

vb.net - 读取控制台进程输出

c# - 遍历所有 Unicode 字符

python - 将列表参数传递给 Jinja2 扩展中的调用节点

python - 如何在列表列表中查找多米诺骨牌的索引

python - 在 python 中执行 oct2py 以运行 Octave 脚本时发生哨兵错误

c++ - 在 C++ 中从字符串中删除数字并保留下划线

xml - 如何从我的 xml 文件中删除 BOM 字符

java - unicode识别是utf-8 utf-16还是其他什么?