0

我有一个很大的句子列表,并想用自己独特的关键字标记每个句子,以帮助我识别哪些句子是相似的以进行分组。

举个例子:

狗跑得很快。- 标记为:狗
猫在睡觉 - 标记为:猫
德国牧羊犬醒了。- 标记为狗

我一直在研究诸如 alchemy api 和 openCalais 之类的工具来提取关键字,但是,您似乎更多地使用这些工具从数据块中提取含义,例如整个文档或段落,而不是标记 1000 个独特但相似的个人句子。

简而言之,理想情况下,我想:

  1. 从文档或网页中提取一个句子(可能来自大型电子表格或推文列表)
  2. 在其上放置一个唯一标识符(某种类型的关键字)
  3. 通过 keywrd 将句子组合在一起
4

1 回答 1

4

我认为附加标识符的意思类似于 nltk 的词性标记(词性)以及词干提取。这是指向 nltkbook 的链接,可能会对您有所帮助。下载说明在这里
选择的语言 IMO 应该是 Python 我有一些示例,您可能想查看:

词干

>>>import nltk
>>>from nltk.stem import PorterStemmer
>>>stemmer = PorterStemmer()
>>>stemmer.stem('cooking')
#'cook' 

创建一个词性标记的词库

>>> from nltk.corpus.reader import TaggedCorpusReader
>>> reader = TaggedCorpusReader('.', r'.*\.pos')
>>> reader.words()
['The', 'expense', 'and', 'time', 'involved', 'are', ...]
>>> reader.tagged_words()
[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ...]
>>> reader.sents()
[['The', 'expense', 'and', 'time', 'involved', 'are', 'astronomical', '.']]
>>> reader.tagged_sents()
[[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ('time', 'NN'), ('involved', 'VBN'), ('are', 'BER'), ('astronomical', 'JJ'), ('.', '.')]]
>>> reader.paras()
[[['The', 'expense', 'and', 'time', 'involved', 'are', 'astronomical', '.']]]
>>> reader.tagged_paras()
[[[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ('time', 'NN'), ('involved', 'VBN'), ('are', 'BER'), ('astronomical', 'JJ'), ('.', '.')]]]

>>> from nltk.tokenize import SpaceTokenizer
>>> reader = TaggedCorpusReader('.', r'.*\.pos', word_tokenizer=SpaceTokenizer())
>>> reader.words()
['The', 'expense', 'and', 'time', 'involved', 'are', ...]

>>> from nltk.tokenize import LineTokenizer
>>> reader = TaggedCorpusReader('.', r'.*\.pos', sent_tokenizer=LineTokenizer())
>>> reader.sents()
[['The', 'expense', 'and', 'time', 'involved', 'are', 'astronomical', '.']]

>>> reader = TaggedCorpusReader('.', r'.*\.pos', tag_mapping_function=lambda t: t.lower())
>>> reader.tagged_words(simplify_tags=True)
[('The', 'at-tl'), ('expense', 'nn'), ('and', 'cc'), ...]

>>> from nltk.tag import simplify
>>> reader = TaggedCorpusReader('.', r'.*\.pos', tag_mapping_function=simplify.simplify_brown_tag)
>>> reader.tagged_words(simplify_tags=True)
[('The', 'DET'), ('expense', 'N'), ('and', 'CNJ'), ...]
>>> reader = TaggedCorpusReader('.', r'.*\.pos', tag_mapping_function=simplify.simplify_tag)
>>> reader.tagged_words(simplify_tags=True)
[('The', 'A'), ('expense', 'N'), ('and', 'C'), ...]

以上两个代码示例取自 nltk 的书籍示例。我已经发布了,以便您可以从表面上看它是否有用。
考虑这两个功能的结合。它们是否符合您的目的?
此外,您可能需要查看STOPWORDS,以便从您给出的第一句话中取出 Dog。

于 2012-03-18T18:18:39.713 回答