在 Gensim 中使用标记文档和循环

Using Tagged Document and Loops in Gensim

我正在尝试使用 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)

在您的代码末尾,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])