2010-07-03 85 views
1

我正在写一段代码,它将从正在运行的文本中提取单词。这个文本可以包含\ r,\ n等分隔符,这些分隔符可能在文本中。使用Python分割运行文本中的单词?

我想丢弃所有这些分隔符,只提取完整的单词。我如何用Python做到这一点?任何可用于在python中处理文本的库?

回答

5

假设你的“字”的定义与正则表达式模块(re)的同意,也就是说,字母,数字和下划线,很容易:

import re 
fullwords = re.findall(r'\w+', thetext) 

其中thetext是有问题的字符串(例如,来自文件对象ff.read()开放阅读,如果这是你从中获取文本的地方)。

如果你以不同的方式定义单词(例如,你想包含撇号,例如“它的”将被视为“一个单词”),它并不难 - 仅仅用作第一个参数findall适当的模式,例如r"[\w']+"为撇号情况。

如果你需要非常,非常复杂(例如,处理使用的单词之间没有中断语言),那么问题突然变得更难,你会需要一些第三方包状nltk

+0

谢谢!这真的帮助我解决了这个问题。我看了一下nltk,但不幸的是,由于C库安装依赖关系,我无法将它与Google App Engine结合使用。 – demos 2010-07-03 17:45:12

1

假设你的分隔符是空白字符(空格等\r\n),则基本str.split()你想要做什么:

>>> "asdf\nfoo\r\nbar too\tbaz".split() 
['asdf', 'foo', 'bar', 'too', 'baz'] 
+0

如果可以考虑将_every_标点符号作为它所涉及的“单词”的一部分,是的,但是这在实际应用程序中并不是一个非常频繁的用例(例如,解析这个注释,您不会看到'“触动“,”用逗号作为“一个单词”来完成;-)。 – 2010-07-03 17:33:31

+0

@Alex Martelli:是的,关于标点符号的好处,但是从这个问题来看,它是否有必要是不明确的 - 定界符的例子都是空格。 OTOH,用这个词保留某些标点符号可能很重要(例如'$',' - ','%'...)。我不同意这不是一个常见的用例,但它依赖于你正在构建的东西 - 拆分表格输出是一回事,解析自然语言是另一回事:) – Stephen 2010-07-03 17:38:46