从网页中提取有意义的文本

3 投票
3 回答
1318 浏览
提问于 2025-04-18 01:15

我正在获取一系列网址,并使用nltk来抓取这些网页的内容。最终我想得到的是一个列表,里面包含网页上的所有单词。不过,我只想找一些关键词和短语,而不是那些常见的英语“虚词”,比如“as, and, like, to, am, for”等等。我知道我可以自己做一个包含所有常见英语单词的文件,然后从我抓取的单词列表中把它们去掉,但有没有什么库可以自动帮我完成这个工作呢?

我其实是在寻找网页上有用的单词,这些单词不是废话,能帮助我理解这个网页的内容。就像stackoverflow上的标签,或者谷歌用来做搜索引擎优化的标签一样。

3 个回答

0

你可以寻找一些可用的语料库,里面有关于单词使用频率的数据(还有其他一些注释信息)。

你可以从维基百科上的链接开始查找:http://en.wikipedia.org/wiki/Corpus_linguistics#External_links

你可能还可以在这个网站找到更多信息:https://linguistics.stackexchange.com/

1

虽然你可以在NLTK(以及其他地方)找到很全面的停用词列表,但你也可以根据你处理的数据类型自己创建列表。大多数你不想要的词被称为语法词,这些词出现得非常频繁,所以你可以通过将词频列表按频率从高到低排序,然后丢掉前面n个词来轻松找到它们。

根据我的经验,在任何一个中等规模的语料库(超过1万词的文本)中,前100个词几乎都不包含内容词

看起来你是想提取关键词。不过,对于这个任务,单纯的词频并不是很有用。你需要把词频转化成与参考语料库相关的其他值:这叫做加权,而实现这个的方式有很多种。TfIdf自1972年以来一直是行业标准。

如果你打算花时间做这些工作,建议你找一本关于语料语言学或计算语言学的入门手册。

3

我觉得你想要的东西是来自nltk.corpus的stopwords.words:

>>> from nltk.corpus import stopwords
>>> sw = set(stopwords.words('english'))
>>> sentence = "a long sentence that contains a for instance"
>>> [w for w in sentence.split() if w not in sw]
['long', 'sentence', 'contains', 'instance']

补充一下:搜索stopword可能会出现重复的问题:使用NLTK去除停用词如何使用nltk或python去除停用词。看看这些问题的回答。另外,也可以考虑一下词干提取对词频的影响?

撰写回答