【问题标题】:Using Tagged Document and Loops in Gensim在 Gensim 中使用标记文档和循环
【发布时间】:2021-09-27 15:30:21
【问题描述】:

我正在尝试使用Doc2Vec 获取大约 5,000 个法律摘要的语料库的文档相似性值(我知道语料库可能有点小,但这是一个概念验证一个包含大约 15,000 条简报的更大语料库的项目,我稍后将进行编译)。由于对 Python 有点陌生,我最初在为文件夹中组装的 5,000 个文本文件创建预处理函数时遇到了一些麻烦,但我设法创建了一个。

问题在于,当我使用Tagged Document 功能为每个文档(“单词”)分配一个“标签”时,只有来自 5,000 个文档(.txt 文件)之一的文本用于“单词”部分,并重复,同时使用每个文档的标签(文件名)。基本上,一份简报会被标记 5,000 次,每个都有不同的标签,而我显然想要 5,000 份简报,每个简报都有一个唯一的文件名标签。

下面是我使用的代码。我想知道是否有人可以帮助我找出我哪里出错了。我不知道这是否是Tagged Document 功能,或者它是否是我创建的循环的问题 - 也许我需要另一个循环,或者我让循环读取文件路径的方式有问题?我对 Python 比较陌生,所以这是完全可能的。

谢谢!

briefs = []
BriefList = [p for p in os.listdir(FILEPATH) if p.endswith('.txt')]
for brief in BriefList:
     str = open(FILEPATH + brief,'r').read()
     tokens = re.findall(r"[\w']+|[.,!?;]", str)
     tagged_data = [TaggedDocument(tokens, [brief]) for brief in BriefList]
     briefs.append(tagged_data)

【问题讨论】:

    标签: python loops tokenize word-embedding doc2vec


    【解决方案1】:

    在您的代码末尾,len(briefs) 是您所期望的吗?查看 briefs[0]briefs[-1] 之类的项目是否会显示您期望的单个 TaggedDocument 项目?

    您可能不希望两个嵌套的 for … in 循环 - 一个遍历所有简报以打开文件,另一个对于每个简报,再次遍历所有简报以分配它们所有相同的tokens值。

    尝试改变你的台词:

         tagged_data = [TaggedDocument(tokens, [brief]) for brief in BriefList]
         briefs.append(tagged_data)
    

    ...一次简单地构造和附加 一个 TaggedDocument...

         briefs.append(TaggedDocument(tokens, [brief])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多