我正在尝试从定义语料库(RCV1数据集标记)的一些文本文件创建字典。我已经在regex的帮助下从一些停用词中清除了文件。原来它看起来像这样:{{3} }。我用这段代码清理了停用词:
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/h3eG5v
所以现在格式是一个带有文档id,整数(训练数据为2286-26150)的行,然后是多个行,其中的标记由一个空格分隔,然后块重复:
2286
令牌令牌令牌令牌令牌令牌
令牌令牌令牌令牌令牌
2287
令牌令牌令牌..
我想要完成的是编写一个函数来读取整个文件,幸运的是它可以放入内存中,然后在列表中构建一个带有文档ID及其对应标记的字典。它应该如下所示:{ '2286':[令牌,令牌,令牌......], '2287':[令牌,令牌,令牌...],...}。我没有想法,因为我找不到在两个连续数字之间重复处理文本的方法,因为我搜索的所有内容通常包括不是数字的分隔符。 只是为了获取信息,我将在下面用这些数据构建一个文本分类器(这就是为什么我需要一个字典)。测试标记与训练标记的格式相同,更高的整数高达800.000
答案 0 :(得分:0)
如果令牌永远不是数字,您可以尝试此代码:
begin
:new.tool := (case when :new.weather in ('sun', 'autumn') then 'no umbrella'
when :new.weather in ('rain') then 'umbrella'
end);
end;
结果:
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