gpt4 book ai didi

python - 从文件 python 中提取 id 和相应的标记并附加到字典中

转载 作者:行者123 更新时间:2023-11-30 09:19:45 24 4
gpt4 key购买 nike

我正在尝试从一些定义语料库(RCV1数据集标记)的文本文件创建字典。我在正则表达式的帮助下清除了文件中的一些停用词。最初它看起来像这样:https://ibb.co/h3eG5v 。我用以下代码清理了停用词:

def cleanFile():
infile = "lyrl2004_tokens_train.dat"
outfile = "cleaned_file.dat"

delete_list = [".W",'.I ']
fin = open(infile)
fout = open(outfile, "w+")

for line in fin:
for word in delete_list:
line = line.replace(word, "")
fout.write(line)
fin.close()
fout.close()

然后使用一个小代码块来删除所有空白行。现在文本文件基本上如下所示: https://ibb.co/e7Ww5v

现在的格式是一行包含文档 ID、整数(2286-26150 用于训练数据),然后是多行,其中标记由一个空格分隔,然后 block 重复:

2286

token token token token token token

代币代币代币代币代币

2287

代币代币代币..

我想要完成的是编写一个函数,该函数将读取整个文件,幸运的是,该文件可以放入内存中,然后使用文档 ID 及其在列表中相应的标记构建一个字典。它应该如下所示:{ '2286':[ token , token , token ...],'2287':[ token , token , token ...],...}。我没有想法,因为我找不到一种方法来重复处理两个连续数字之间的文本,因为我搜索的所有内容通常都包含非数​​字的分隔符。仅供引用,接下来我将使用这些数据构建一个文本分类器(这就是我需要字典的原因)。测试标记的格式与训练标记的格式相同,整数最高可达 800.000

最佳答案

如果 token 永远不是数字,您可以尝试此代码:

text = '''123
dpqvjp jpo fjiqo iq[woe f
wf q q[ewfp wqervg
436
oiwbrveojibnpibn eprvnj erv p eprwoij
536
oiberv ih reip rewp wepri pirvnep
erpvj pre
er
erpno poj rgwe epo
'''
dct = {}
current_id = None
for el in text.split():
if el.isdigit():
current_id = el
dct[current_id] = []
else:
dct[current_id].append(el)
print(dct)

结果:

{'123': ['dpqvjp', 'jpo', 'fjiqo', 'iq[woe', 'f', 'wf', 'q', 'q[ewfp', 'wqervg'], '536': ['oiberv', 'ih', 'reip', 'rewp', 'wepri', 'pirvnep', 'erpvj', 'pre', 'er', 'erpno', 'poj', 'rgwe', 'epo'], '436': ['oiwbrveojibnpibn', 'eprvnj', 'erv', 'p', 'eprwoij']}

如果标记中有数字,您可以为您的id发明一个模式,例如:

<ID=2647>

所以你的文档将如下所示:

<ID=123>
dpqvjp jpo fjiqo iq[woe f
wf q q[ewfp wqervg
<ID=436>
oiwbrveojibnpibn eprvnj erv p eprwoij
<ID=536>
oiberv ih reip rewp wepri pirvnep
erpvj pre
er
erpno poj rgwe epo

您应该使用以下代码解析它:

import re
text = '''<ID=123>
dpqvjp jpo fjiqo iq[woe f
wf q q[ewfp wqervg
<ID=436>
oiwbrveojibnpibn eprvnj erv p eprwoij
<ID=536>
oiberv ih reip rewp wepri pirvnep
erpvj pre
er
erpno poj rgwe epo
'''
dct = {}
current_id = None
for el in text.split():
match = re.match(r'<ID=(\d+)>', el)
if match:
current_id = match.group(1)
dct[current_id] = []
else:
dct[current_id].append(el)
print(dct)

关于python - 从文件 python 中提取 id 和相应的标记并附加到字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com