将0和1的字符串转换为SVM分析的向量行

RHK*_*-S8 0 python

作为回答的另一个问题的后续跟进,我现在有以下格式的数据:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个python函数(可能是for循环),它实现了以下输出:

34:1
27:1 33:1 36:1
20:1 32:1
Run Code Online (Sandbox Code Playgroud)

注意第一个数字是它曾经在40长度长位模式中所具有的位置.第二个数字(冒号后)是原始数字"1".

我是python的新手,并在这里发布我的问题,这对我学习python有很大帮助.所以,如果你有任何想法如何做到这一点,请随时回复.再一次,这不是功课,我试图创建一个情绪分析程序,我需要这种数据格式的SVM.另一种格式是TiMBL.

编辑

因为有些行只包含0.令人敬畏:)的输出回答如下,在输出文本文件中产生空行.如何添加防止这种情况发生的功能?或者创建一个读取文件的新函数,并删除换行符?我有一种感觉会删除所有这些,这可能会给我带来麻烦.

Ash*_*ary 5

>>> strs = """0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0"""

>>> for x in strs.splitlines():                                                              
    print " ".join("{}:{}".format(i,1) for i,y in enumerate(x.split(), 1) if y=='1')
...     
34:1
27:1 33:1 36:1
20:1 32:1
Run Code Online (Sandbox Code Playgroud)

对于文件:

>>> with open("abc") as f:
    for line in f:
        strs =  " ".join("{}:{}".format(i,1) for i,y in enumerate(line.split(), 1) if y=='1')
        if strs:
            print strs
...             
34:1
27:1 33:1 36:1
20:1 32:1
Run Code Online (Sandbox Code Playgroud)

其中abc包括:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)