提取id和相应的标记并从文件python

时间:2017-06-02 11:04:30

标签: python dictionary machine-learning nlp

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

1 个答案:

答案 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