处理HTML和NLTK

0 投票
1 回答
515 浏览
提问于 2025-04-18 08:39

我正在尝试用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 对象,进一步处理这些内容,就像上面提到的那样。如果出现问题,那很可能是正则表达式出了错,你需要进行一些调整。希望这对你有帮助。

撰写回答