我正在尝试从一些定义语料库(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/