2011-06-20 73 views
3

我想從所謂的紐約時報首頁上刮掉所有英文單詞。我寫在Python這樣的事情:使用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後,它似乎只是談論刮擦的機制,沒有提到的工具談論如何過濾掉非語言元素。我對鏈接,格式等沒有興趣。只是簡單的話。任何幫助,將不勝感激。

回答

4

你確定你想要「英文」單詞 - 從某種意義上說它們出現在字典中嗎?例如,如果您刮掉了「紐約時報」的一篇文章,您是否想要在其中包含「奧巴馬」(或「佩林」),儘管他們可能沒有出現在任何字典中?

在許多情況下,更好地解析HTML(使用BeautifulSoup作爲Bryan的建議),並且只包含文本節點(也可能包含一些像「title」和「alt」這樣的人類目標屬性)。

+0

我剛剛意識到這已被回答,使用BeatifulSoup和NYTimes作爲一個例子甚至在這裏http://stackoverflow.com/questions/1936466/beautifulsoup-grab-visible-webpage-text – user423805

+0

是的,我想要奧巴馬和基本上,我想要所有可見的單詞,而不是簡單的「英語」單詞。對困惑感到抱歉。我不想要字典查找,我也可以將這些代碼用於其他語言。 – user423805

1

您需要某種英文字典參考。一個簡單的方法是使用拼寫檢查器。想起了​​。

從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僅解析出重要文本。

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英文單詞酷的語料庫和語言處理工具。

1

Html2Text可以是一個不錯的選擇。

進口html2text

打印html2text.html2text(your_html_string)

0

您可以取代所有<。*>一無所有或空間。使用re模塊,並確保您瞭解貪婪和非貪婪模式匹配。你需要非貪婪的。

然後,一旦你剝離了所有的標籤,應用你使用的策略。