处理HTML和NLTK
我正在尝试用NLTK处理HTML文件。首先,我用PlaintextCorpusReader加载了所有文件:
from nltk.corpus import PlaintextCorpusReader
corpus_root = 'C:\corpus\'
wordlists = PlaintextCorpusReader(corpus_root, '.*')
现在我该怎么用像'urlopen(url).read()'这样的函数来处理HTML呢?或者有没有其他方法可以处理它,比如读取那个目录下的所有文件并处理HTML文件?
1 个回答
0
方法 A: 如果你只想处理那些在 .html 文件里的 HTML 内容,你可以用 html_files = PlaintextCorpusReader(corpus_root,'.*\.html')
来找到这些文件。然后,你可以使用 BeautifulSoup 或 lxml(或者你喜欢的 urllib)来从字符串中读取内容,创建 DOM 对象。举个例子:
from lxml import etree
for htm in html_files:
dom = etree.fromstring(htm)
#any further manipulations, e.g.:
content = dom.cssselect('#content') # you can also use cssselect to take all links or whatever
maintext = content[0].text # in case there are no other embedded tags in this one
方法 B: 如果你要处理的是包含纯文本和 HTML 部分的“混合”文件,那么我想唯一的方法就是使用正则表达式来根据标签提取 HTML 部分,比如:htm_part = re.findall('<.*?>.*?</.*?>',yourdoc,re.DOTALL)
。这样做可能会返回一个列表,特别是当文件很长的时候,所以你可以接着用 ''.join(htm_part)
来把这些部分连接起来。提取出 HTML 部分后,你可以再次尝试使用 lxml 或 BeautifulSoup 来创建 DOM 对象,进一步处理这些内容,就像上面提到的那样。如果出现问题,那很可能是正则表达式出了错,你需要进行一些调整。希望这对你有帮助。