我正在尝试使用 Doc2Vec 获取大约 5,000 个法律摘要的语料库的文档相似性值(我认识到语料库可能有点小,但这是一个更大语料库的概念验证项目大约 15,000 份简报,我稍后将进行编译)。
基本上,到目前为止,模型创建中的每个其他组件都进行得相对较好——我拥有的每个简报都在一个较大文件夹中的文本文件中,所以我在我的脚本中使用它们编译它们glob.glob
——但我遇到了一个标记化问题. 困难在于,由于这些文件是法律摘要,它们包含我想保留的数字,而且我用来帮助我编写代码的许多指南都使用 Gensim 的简单预处理,我相信它可以消除数字语料库,与 TaggedDocument 功能相结合。但是,我想尽可能少地对文本进行预处理。
下面是我使用的代码,我尝试将 simple_preprocess 替换为 genism.utils.tokenize,但是当我这样做时,我得到的生成器对象在我的最终 Doc2Vec 模型中似乎不可用,而且我不能实际看看语料库的样子。当我尝试使用其他标记器时,例如nltk
,我不知道如何将其放入 TaggedDocument 组件中。
brief_corpus = []
for brief_filename in brief_filenames:
with codecs.open(brief_filename, "r", "utf-8") as brief_file:
brief_corpus.append(
gensim.models.doc2vec.TaggedDocument(
gensim.utils.simple_preprocess(
brief_file.read()),
["{}".format(brief_filename)])) #tagging each brief with its filename
我很感激任何人都可以提供的任何建议,这将帮助我结合一个仅在空格上分隔并且没有消除任何数字与 TaggedDocument 功能的标记器。谢谢!
更新:我能够为一些基本的标记化创建一个基本代码(我确实计划进一步完善它),而不必求助于 Gensim 的 simple_preprocessing 功能。但是,我在使用 TaggedDocument 功能时遇到了困难(再次!) - 但是这一次,标签(我想成为每个简报的文件名)与标记化的文档不匹配。基本上,每个文档都有一个标签,但它不是正确的。
谁能告诉我下面的新代码哪里出错了?谢谢!
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)