如何用Python选择合适的机器学习算法将一段文字转化为字典?

假设有这样一段字符串:

name:Bill
age:20
salary:9999

需要将它转化为 Python 的字典:

info = {'name': 'Bill', 'age': 20, 'salary': 9999}

当然,对每一行使用 split(':')就可以直接进行分割得到 Key 和 Value,但这并不是根本的解决办法。因为还存在以下格式的字符串:

name>Bill
age>20
salary>9999

或者

Bill==>name
20==>age
9999==>salary

或者

name,age,salary
Bill,20,9999

这些字符串让人来看,可以发现他们对应的 Python 字典是完全一样的,但是这就不能简单地通过规则匹配来转换了。

每一种格式的字符串都有一万个,所以训练集数量不是问题。希望能实现一个机器学习算法,输入一些训练集来训练这个系统,之后再输入新的字符串,就能个自动输出对应的 Python 字典。

请问这样的系统应该如何设计?


如何用Python选择合适的机器学习算法将一段文字转化为字典?

25 回复

只是标点符号分割的话 a-zA-Z0-9 就搞定了啊?


我无法理解你的问题。

尽量不用使用规则匹配来处理这个问题,否则就没有意义了。

那就先用 RNN 实现一个正则引擎吧,"MIT 去年的 EMNLP 论文做的就是这个: http://t.cn/R9ySVCn "

感谢,我先去看看。

编译原理啊,plyplus 随随便便就写出来了

难道能实现一个通用的 grammer.g 搞定所有格式的字符串?

起码就你描述出来的几种是没问题的,如果是所有可能的格式,估计没有任何方法可以解决。
机器学习不是万能的,训练集是要打标签的,unsupervise 训练方法是要给出某些规则的。

所以简而言之都是要给定某些规则的

除了最后一种,前面的确实用正则就可以了,用不到机器学习。

还有比最后一种更离奇的格式。但是人眼可以离开看出来。所以才需要机器学习

我希望它能跟我我输入的字符串和这个字符串对应的字典,自己去发现他们之间的转化关系。

我倒是有个差不多的需求, 就是从 txt 小说里抽取章节标题

只要每种格式的符号固定, 选取几行数据, 计算出公共符号和变化的范围, 就能大概得出 key 和 value 了

简单的问题何必搞复杂呢,
人:发现了规则,写出了正则;
机器:费老大劲发现了规则,写出了‘正则’,还不一定百分百正确;
所以,何必绕一圈呢

斯坦福大学自然语言处理第一课就是正则匹配。正则匹配简单高效,别小瞧啊。

py 有个 re.split 可以用正则分割啊,机器学习不嫌麻烦吗…又得找数据又得打标签

机器学习不是银弹,你都有格式+字典了,直接产生规则不就好了吗。
你这能用多少种格式呢?你有这时间标注+搞机器学习,手动写规则都写完了。

杀鸡焉用牛刀啊

啥都想要机器学习来做…给数据打标签的时间就够把数据分类了。
数据分类之后根据数据的不同种类正则匹配就能解决 99%了。其他解析不了的 1%根据数据量选择是丢弃还是继续分类。

这类有绝对对错判断的命题,用不上机器学习,你是要离散性高还是正确率高?

人能看出来是因为有先验知识。楼主觉得机器能搞定先打 10w 标作为训练样本压压惊

正确率。

我有一百万种格式,每一种格式都有一个对应的 dict。不可能每一种都自己写规则。当然,打标签也不会每一种都打。这也是为什么我在帖子的 Append 里面说用深度神经网络而不是普通机器学习算法的原因。

比较好奇一百万种格式的原始数据是哪些人创造的

你需要的只是 pyparsing

回到顶部