如何从文本中去除动词、介词、连词等?

15 投票
2 回答
36413 浏览
提问于 2025-04-18 11:00

基本上,我想在我的文本中只保留名词,其他的词都想去掉。

我觉得没有什么自动化的方法可以做到这一点。如果有的话,请告诉我。

如果没有自动化的方法,我也可以手动处理,但我需要一些所有可能的动词、介词、连词、形容词等的列表。有没有人能推荐一个可以找到这些具体列表的地方?

2 个回答

1

关于手动操作。

这是维基词典的数据下载。

https://dumps.wikimedia.org/enwiktionary/20140609/

我建议你跳过所有完整文章的数据下载,直接使用摘要部分。摘要里包含了词类信息。祝你好运,格式处理起来可真不简单。

如果你想开始用Python:

import xml.etree.ElementTree as ET
wiktionary = file('/path/to/wiktionary.xml')
tree = ET.iterparse(wiktionary.xml)
for event, elem in tree:
    if elem.tag == your_target_tag:
        do magic

这段代码应该能帮助你入门。

这比很多其他列表要麻烦一些,但它提供的信息比我用过的任何其他自然语言处理工具都要丰富。祝你好运,注意处理Unicode编码的问题!

42

你可以使用NLTK这个工具来给每个单词打标签,然后只保留名词。下面是一个来自NLTK官网的例子:

>>> import nltk
>>> sentence = """At eight o'clock on Thursday morning
... Arthur didn't feel very good."""
>>> tokens = nltk.word_tokenize(sentence)
>>> tokens
['At', 'eight', "o'clock", 'on', 'Thursday', 'morning',
'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
>>> tagged = nltk.pos_tag(tokens)
>>> tagged[0:6]
[('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), ('on', 'IN'),
('Thursday', 'NNP'), ('morning', 'NN')]

在你的情况下,你需要保留所有标签以N开头的元素,也就是所有名词,把其他的丢掉。你可以查看完整的标签列表;你可能还想包括外语单词(FW),比如说。

NLTK是免费的,而且它自带的数据集也是免费的。你不需要自己去建立介词之类的列表。

撰写回答