使用Python刮痧英语单词

时间:2011-06-20 23:39:55

标签: python nlp urllib2 web-scraping urllib

我想从“纽约时报”头版中删除所有英文单词。我在Python中写了这样的东西:

import re
from urllib import FancyURLopener

class MyOpener(FancyURLopener):
    version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'            

opener = MyOpener()
url = "http://www.nytimes.com"
h = opener.open(url)
content = h.read()
tokens = re.findall("\s*(\w*)\s*", content, re.UNICODE) 
print tokens

这没关系,但我得到HTML关键字,如“img”,“src”以及英文单词。是否有一种简单的方法可以从Web scaping / HTML中获取英语单词?

我看到this帖子,它似乎只是谈论抓取的机制,没有提到的工具谈论如何过滤掉非语言元素。我对链接,格式等不感兴趣。只是简单的单词。任何帮助,将不胜感激。

5 个答案:

答案 0 :(得分:4)

你确定你想要“英语”单词 - 从它们出现在某些词典的意义上来说?例如,如果您删除了一篇NYT文章,您是否希望将“奥巴马”(或者“佩林”包含在那里的蓝色州议员中)包括在内,即使它们可能没有出现在任何词典中呢?

更好的是,在许多情况下,要解析HTML(使用BeautifulSoup,如布莱恩所建议的那样)并且仅包含文本节点(可能还有一些针对人类的属性,如“title”和“alt”)。

答案 1 :(得分:1)

您需要某种英语词典参考。这样做的一个简单方法是使用拼写检查程序。想到PyEnchant

来自PyEnchant网站:

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
>>>

在你的情况下,或许类似于:

d = enchant.Dict("en_US")
english_words = [tok for tok in tokens if d.check(tok)]

如果这还不够,并且您不想要出现在HTML标记中的“英语单词”(例如属性),则可以使用BeautifulSoup来解析重要文本。

答案 2 :(得分:1)

Html2Text可能是个不错的选择。

  

导入html2text

     

print html2text.html2text(your_html_string)

答案 3 :(得分:0)

我喜欢使用lxml library

# copypasta from http://lxml.de/lxmlhtml.html#examples
import urllib
from lxml.html import fromstring
url = 'http://microformats.org/'
content = urllib.urlopen(url).read()
doc = fromstring(content)
els = el.find_class(class_name)
if els:
    return els[0].text_content()

然后,为了确保抓取的单词只是英语单词,您可以使用在文本文件中加载的词典中查找它们,或者使用许多很酷的语料库和语言处理工具附带的NLTK

答案 4 :(得分:0)

您可以替换所有<。*>没有任何东西或空间。使用re模块,确保您了解贪婪和非贪婪的模式匹配。你需要非贪心。

然后,一旦剥离了所有标签,请应用您正在使用的策略。