Python中的关键词提取

1 投票
2 回答
1418 浏览
提问于 2025-04-15 20:56

我正在用Django搭建一个网站,需要从短消息(像推特那样的)中提取关键词。

我看过一些工具,比如topia.textextract和nltk,但这两个工具对我来说有点复杂。我只需要过滤掉像“和”、“或”、“不”这样的词,同时保留名词和动词,而不包括连词或其他词性。有没有什么更简单的工具可以做到这一点呢?

补充说明:这个功能需要在生产网站上几乎实时完成,所以使用关键词提取服务似乎不太可行,因为它们的响应时间和请求限制让我觉得不太合适。

2 个回答

1

像“NO”代表导航官,或者“OR”代表操作室这样的缩写,需要小心使用,以免搞错了事情 ;-) 有人觉得,如果在句子中给这些词加上词性标签,可能会得到更好的结果,比如“找到NO并把她送到OR”。提示1:“the OR”应该被识别为“the [名词]”,而不是“the [连词]”。提示2:如果对某个词不确定,就把它当作关键词处理。

3

你可以先创建一个叫做 sw 的集合,里面放你想要去掉的“停用词”(也就是那些对理解句子没什么帮助的词,比如“的”、“是”等)。如果你对需要支持的各种语言不太熟悉,可以直接从 NLTK 的停用词库里复制一份,省事又方便。

比如说,如果你有一个单词列表 sent,这个列表是由句子中的单词组成的(为了简单起见,去掉了标点符号并且都变成小写),那么你只需要用 [word for word in sent if word not in sw] 这段代码,就能轻松得到一个不包含停用词的单词列表,简单吧?

要先得到 sent 列表,你可以使用标准库里的 re 模块,像这样用 re.findall(r'\w+', sentstring),如果 sentstring 是你要处理的句子字符串,这样就可以了。这个方法不会自动把单词变成小写,但你可以把我上面提到的列表推导式改成 [word for word in sent if word.lower() not in sw],这样就能解决这个问题,同时还能保留单词的原始大小写,这可能会很有用。

撰写回答