将文本转换为V

2024-04-25 22:04:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,上面有单词和每个单词的频率。在

{'cxampphtdocsemployeesphp': 1,
'emptiness': 1, 
'encodingundefinedconversionerror': 1, 
'msbuildexe': 2,
'e5': 1, 
'lnk4049': 1,
'specifierqualifierlist': 2, .... }

现在我想用这个字典创建一个单词包模型(我不想使用标准库和函数。我想用这个算法来应用它。)

  1. 在字典里找出N个最流行的词并计算出来。现在我们有了一本最流行的词汇词典。在
  2. 为字典中的每个标题创建一个维数为N的零向量
  3. 对于语料库中的每个文本,迭代字典中的单词并将相应的坐标增加1。在

我有我的文本,我将使用一个函数来创建向量。在

函数应该是这样的

^{pr2}$

任何帮助应用这将是非常有帮助的。我使用python实现。在

谢谢

尼尔


Tags: 函数模型文本标准字典单词向量频率
2条回答

你需要首先计算每个词的词库频率,并将它们保存在频率字典中。假设cherry碰巧在你的语料库中出现了78次,你需要保持。然后按频率值降序对频率字典进行排序,然后保留前N对。在

然后,对于枚举,您可以保留一个字典作为索引。例如,cherry>;term2用于索引字典。在

现在,需要准备一个关联矩阵。它将是文档的载体,如下所示:

doc_id   term1 term2 term3 .... termN
doc1       35     0    23         1
doc2        0     0    13         2
   .        .     .     .         .
docM        3     1     2         0

语料库中的每个文档(文本、标题、句子)都需要有一个id或索引以及上面列出的内容。现在是为文档创建向量的时候了。遍历文档并通过标记化来获取术语,每个文档都有标记。迭代令牌,检查下一个令牌是否存在于频率字典中。如果为真,请使用索引字典和频率字典更新零向量。在

假设doc5有cherry,我们在前N个流行术语中有cherry。得到它的频率(78)和指数(第5项)。现在更新doc5的零向量:

^{pr2}$

您需要针对语料库中每个文档的所有流行术语对每个标记执行此操作。在

最后,您将得到一个NxM矩阵,其中包含您的语料库中M个文档的向量。在

我可以建议你看看我的书。https://nlp.stanford.edu/IR-book/information-retrieval-book.html

你可能会考虑使用基于tf-idf的矩阵,而不是他们所建议的基于语料库频率的术语关联矩阵。在

希望这个帖子有帮助

干杯

我做了我的研究,并希望分享我的答案!在

我的数据看起来像这样,已经存储在一个列表中:

data_list = ['draw stacked dotplot r',
 'mysql select records datetime field less specified value',
 'terminate windows phone 81 app',
 'get current time specific country via jquery',
 'configuring tomcat use ssl',...]

接下来我计算了列表中每个单词的频率

^{pr2}$

因此,我的单词数字典将包含我的数据表中的所有单词及其频率。 它看起来像这样

 {'detailed': 6,
 'ole_handle': 1,
 'startmonitoringsignificantlocationchanges': 2,
 'pccf02102': 1,
 'insight': 2,
 'combinations': 26,
 'tuplel': 1}

现在对于我们的my_bag_of_word函数,我需要按降序对单词进行排序并为每个单词分配索引。在

index_to_word = sorted(words_counts.key(), key = lambda x:words_counts[x], reverse = True) 
words_to_index = {word:i for i,word in enimerate(index_to_words)}

现在我们的单词“从”到“u”的索引如下所示:

  {'address': 387,
 'behind': 706,
 'page': 23,
 'inherited': 1617,
 '106': 4677,
 'posting': 1293,
 'expressions': 876,
 'occured': 3241,
 'highest': 2989}

现在我们终于可以用我们创建的字典得到文本的向量

def my_bag_of_words(text, words_to_index, size_of_dictionary):
   word_vector = np.zeros(size_of_dictionary)
   for word in text.split():
       if word in words_to_index:
          word_vector[words_to_index[word]] += 1
   return word_vector

这是一个学习和理解这个概念的好方法。谢谢大家的帮助和支持。在

快乐学习

尼尔

相关问题 更多 >