【问题标题】:Method/Tool for Extracting Keywords from List of Sentences从句子列表中提取关键字的方法/工具
【发布时间】:2012-04-03 08:57:53
【问题描述】:

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

举个例子:

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

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

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

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

【问题讨论】:

  • “唯一关键字”是什么意思?例如,如果输入是“狗跑得比猫快”,您将其标记为“狗”还是“猫”?如何期望算法确定一个单个,总结整个句子的唯一标签?
  • 抱歉,只是关键字...在您的示例中适用于狗和猫。

标签: nlp search-engine data-mining text-mining semantic-analysis


【解决方案1】:

我认为附加标识符的意思类似于 nltk 的词性标记(词性)以及词干提取。这是 nltkbook 的link,可能会对您有所帮助。下载说明为here
选择 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。

【讨论】:

    猜你喜欢
    • 2015-02-08
    • 2011-09-08
    • 1970-01-01
    • 2021-08-13
    • 2010-12-28
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多