基本上在我的文字中我只想保留名词并删除其他部分的词性。
我认为没有任何自动化的方式。如果有请建议。
如果没有自动化方式,我也可以手动完成,但为此,我需要所有可能的说法,动词或介词或连词或形容词等的列表。有人可以建议一个可能的来源,我可以得到这些具体清单。
答案 0 :(得分:26)
您可以使用NLTK词性标注器标记每个单词,然后只保留名词。这是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')]
在您的情况下,您要保留tagged
列表中包含以N开头的标记的所有元素,即所有名词,然后将其余部分抛弃。查看complete list of tags;例如,您可能还想包含外来词(FW)。
NLTK可以免费使用,它带有自己的数据集,也是免费的。你不必自己建立介词列表等等。
答案 1 :(得分:1)
在手册结束。
维基转储。
https://dumps.wikimedia.org/enwiktionary/20140609/
我只想跳过任何风格的全文转储,然后再去摘要。它包含单词class。祝你好运,格式化是野兽。
开始使用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
应该让你开始。
它比许多其他列表更多的工作,但它比我用于NLP的任何其他东西都要丰富得多。祝你好运,并留意unicode!