我正在写一段代码,它将从正在运行的文本中提取单词。这个文本可以包含\ r,\ n等分隔符,这些分隔符可能在文本中。使用Python分割运行文本中的单词?
我想丢弃所有这些分隔符,只提取完整的单词。我如何用Python做到这一点?任何可用于在python中处理文本的库?
我正在写一段代码,它将从正在运行的文本中提取单词。这个文本可以包含\ r,\ n等分隔符,这些分隔符可能在文本中。使用Python分割运行文本中的单词?
我想丢弃所有这些分隔符,只提取完整的单词。我如何用Python做到这一点?任何可用于在python中处理文本的库?
假设你的“字”的定义与正则表达式模块(re
)的同意,也就是说,字母,数字和下划线,很容易:
import re
fullwords = re.findall(r'\w+', thetext)
其中thetext
是有问题的字符串(例如,来自文件对象f
的f.read()
开放阅读,如果这是你从中获取文本的地方)。
如果你以不同的方式定义单词(例如,你想包含撇号,例如“它的”将被视为“一个单词”),它并不难 - 仅仅用作第一个参数findall
适当的模式,例如r"[\w']+"
为撇号情况。
如果你需要非常,非常复杂(例如,处理使用的单词之间没有中断语言),那么问题突然变得更难,你会需要一些第三方包状nltk。
假设你的分隔符是空白字符(空格等\r
和\n
),则基本str.split()
你想要做什么:
>>> "asdf\nfoo\r\nbar too\tbaz".split()
['asdf', 'foo', 'bar', 'too', 'baz']
如果可以考虑将_every_标点符号作为它所涉及的“单词”的一部分,是的,但是这在实际应用程序中并不是一个非常频繁的用例(例如,解析这个注释,您不会看到'“触动“,”用逗号作为“一个单词”来完成;-)。 – 2010-07-03 17:33:31
@Alex Martelli:是的,关于标点符号的好处,但是从这个问题来看,它是否有必要是不明确的 - 定界符的例子都是空格。 OTOH,用这个词保留某些标点符号可能很重要(例如'$',' - ','%'...)。我不同意这不是一个常见的用例,但它依赖于你正在构建的东西 - 拆分表格输出是一回事,解析自然语言是另一回事:) – Stephen 2010-07-03 17:38:46
谢谢!这真的帮助我解决了这个问题。我看了一下nltk,但不幸的是,由于C库安装依赖关系,我无法将它与Google App Engine结合使用。 – demos 2010-07-03 17:45:12