如何将多个TXT文件的逐行频率分布转换为单个矩阵?每个文件都有完全相同的结构,因为所有单词/术语/短语的顺序相同,并且包含在每个文件中。每个文件的唯一性是文件名、发布日期和单词/术语/短语的频率,由":"后的数字给出,请参阅以下内容:
我的输入文件的样子:
Company ABC-GH Date:31.12.2012
financial statement:4
corporate-taxes:8
assets:2
available-for-sale property:0
auditors:213
123-Company XYZ Date:31.12.2012
financial statement:15
corporate-taxes:3
assets:8
available-for-sale property:2
auditors:23
我有多个文件,它们的单词/短语顺序完全相同,只是频率不同(":"后面的数字)
现在,我想创建一个包含矩阵的单个文件,该矩阵将所有单词保持为顶列,并将文件特征(文件名、日期和频率)附加为行条目,这些条目以逗号分隔,以便进一步处理它们,即,如果第三个逗号(第四个条目)后面的术语是"公司税",则对于每一行,第四个条目的频率应为该术语在文件中的相关频率。
期望输出:
Filename,Date, financial statement, corporate-taxes, .. auditors
COMPANY ABC-GH , 2008 , 15 , 3 , 23
123-COMPANY XYZ , 2010 , 9 , 6 , 11
最后,我想将结果写入TXT文件。你有主意吗?
假设您有一个文件列表
lof = ['a1.txt', 'a2.txt', 'b1.txt']
您可以将结果初始化为空列表
res = []
然后将您为每个输入文件计算的特定列表理解添加到结果中
for f in lof:
res += [[entry.split(':')[1] for entry in cdata ]
for cdata in [data.splitlines() for data in open(f).read().split('nn')]]
让我们来看看理解的内部,对于一个与您的示例'ex.txt'
内容相同的文件
In [44]: [d.splitlines() for d in open('ex.txt').read().split('nn')]
Out[44]:
[['Company ABC-GH Date:31.12.2012',
'financial statement:4',
'corporate-taxes:8',
'assets:2',
'available-for-sale property:0',
'auditors:213'],
['123-Company XYZ Date:31.12.2012',
'financial statement:15',
'corporate-taxes:3',
'assets:8',
'available-for-sale property:2',
'auditors:23']]
理解外部的每个cdata
是什么?
In [45]: for cdata in [d.splitlines() for d in open('ex.txt').read().split('nn')]:
....: print cdata
....:
['Company ABC-GH Date:31.12.2012', 'financial statement:4', 'corporate-taxes:8', 'assets:2', 'available-for-sale property:0', 'auditors:213']
['123-Company XYZ Date:31.12.2012', 'financial statement:15', 'corporate-taxes:3', 'assets:8', 'available-for-sale property:2', 'auditors:23']
对于每个cdata
(即公司数据),我们想要一个仅包含:
之后的部分的列表,因此我们在':'
&只保留索引1
元素
In [46]: [[entry.split(':')[1]for entry in cdata]]
Out[46]: [['31.12.2012', '15', '3', '8', '2', '23']]
这只是一个问题,把它放在一个单一的列表理解
In [47]: [[entry.split(':')[1]for entry in comp_data ]for comp_data in [data.splitlines()for data in open('dele.txt').read().split('nn')]]
Out[47]:
[['31.12.2012', '4', '8', '2', '0', '213'],
['31.12.2012', '15', '3', '8', '2', '23']]
并将其放入我之前展示的循环中,累积所有输入文件