gog*_*s09 4 python parsing text machine-learning text-parsing
我有一个text file保存一些操作结果的对象。数据显示在human-readable format(如表格)中。我如何解析这些数据,以便可以形成一个数据结构,例如dictionaries使用这些数据?
下面显示了一个示例unstructured data。
===============================================================
Title
===============================================================
Header Header Header Header Header Header
1 2 3 4 5 6
---------------------------------------------------------------
1 Yes No 6 0001 0002 True
2 No Yes 7 0003 0004 False
3 Yes No 6 0001 0001 True
4 Yes No 6 0001 0004 False
4 No No 4 0004 0004 True
5 Yes No 2 0001 0001 True
6 Yes No 1 0001 0001 False
7 No No 2 0004 0004 True
Run Code Online (Sandbox Code Playgroud)
上例中显示的数据不是tab-separated或comma separated。它总是有一个header并且相应地可能/可能没有沿着column-like外观的值。
我尝试过使用基本的解析技术,例如regex和conditional checks,但我需要一种更强大的方法来解析这些数据,因为上面显示的示例并不是呈现数据的唯一格式。
更新 1:除了所示的示例之外,还有很多情况,例如添加更多列、单个单元格具有多个实例(但在下一行中直观地显示,而它属于上一行)。
有没有python库可以解决这个问题?
machine learning技术可以在不解析的情况下帮助解决这个问题吗?如果是,这是什么类型的问题(分类、回归、聚类)?
===============================================================
Title
===============================================================
Header Key_1 Header Header Header Header
1 Key_2 3 4 5 6
---------------------------------------------------------------
1 Value1 No 6 0001 0002 True
Value2
2 Value1 Yes 7 0003 0004 False
Value2
3 Value1 No 6 0001 0001 True
Value2
4 Value1 No 6 0001 0004 False
Value2
5 Value1 No 4 0004 0004 True
Value2
6 Value1 No 2 0001 0001 True
Value2
7 Value1 No 1 0001 0001 False
Value2
8 Value1 No 2 0004 0004 True
Value2
Run Code Online (Sandbox Code Playgroud)
更新 2:它可能看起来像的另一个示例,涉及具有多个实例的单个单元格(但在下一行中直观地显示,而它属于上一行)。
假设您的示例是“sample.txt”。
import pandas as pd
df = pd.read_table('sample.txt', skiprows=[0, 1, 2, 3, 5], delimiter='\s\s+')
print(df)
print(df.shape)
1 2 3 4 5 6
0 1 Yes No 6 0001 0002 True
1 2 No Yes 7 0003 0004 False
2 3 Yes No 6 0001 0001 True
3 4 Yes No 6 0001 0004 False
4 4 No No 4 0004 0004 True
5 5 Yes No 2 0001 0001 True
6 6 Yes No 1 0001 0001 False
7 7 No No 2 0004 0004 True
(8, 6)
Run Code Online (Sandbox Code Playgroud)
当然,您可以更改数据类型。请检查大量的pd.read_table(). 此外,还有xlsx、csv、html、sql、json、hdf、甚至剪贴板等方法。
欢迎来到熊猫...