如何选择一个合适的机器学习算法将一段文字转化为 Python 字典? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
billion
V2EX    Python

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

  •  
  •   billion
    kingname 2017-07-28 16:04:37 +08:00 3534 次点击
    这是一个创建于 3051 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有这样一段字符串:

    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 字典。

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

    第 1 条附言    2017-07-28 17:02:22 +08:00

    我自己的想法是:

    训练的时候,输入几百条相同格式字符串,和相应的字典。然后使用深度神经网络去尝试自动生成FSM,不断的试错,直到找到一个正确的FSM,可以根据这个格式的字符串生成对应的字典。这个试错过程就像是之前有个国外网友用深度神经网络在GTA5里面开骑车一样。

    24 条回复    2017-07-29 22:06:31 +08:00
    Keyes
        1
    Keyes  
       2017-07-28 16:08:45 +08:00
    只是标点符号分割的话 a-zA-Z0-9 就搞定了啊?
    billion
        2
    billion  
    OP
       2017-07-28 16:09:37 +08:00
    @Keyes 尽量不用使用规则匹配来处理这个问题,否则就没有意义了。
    wineway
        3
    wineway  
       2017-07-28 16:16:04 +08:00 via Android
    那就先用 RNN 实现一个正则引擎吧,"MIT 去年的 EMNLP 论文做的就是这个: http://t.cn/R9ySVCn "
    billion
        4
    billion  
    OP
       2017-07-28 16:16:49 +08:00
    @wineway 感谢,我先去看看。
    Kilerd
        5
    Kilerd  
       2017-07-28 16:21:11 +08:00 via iPhone
    编译原理啊,plyplus 随随便便就写出来了
    billion
        6
    billion  
    OP
       2017-07-28 16:28:05 +08:00
    @Kilerd 难道能实现一个通用的 grammer.g 搞定所有格式的字符串?
    Kilerd
        7
    Kilerd  
       2017-07-28 16:33:55 +08:00 via iPhone
    @billion 起码就你描述出来的几种是没问题的,如果是所有可能的格式,估计没有任何方法可以解决。
    机器学习不是万能的,训练集是要打标签的,unsupervise 训练方法是要给出某些规则的。

    所以简而言之都是要给定某些规则的
    yunkchen
        8
    yunkchen  
       2017-07-28 16:36:28 +08:00
    除了最后一种,前面的确实用正则就可以了,用不到机器学习。
    billion
        9
    billion  
    OP
       2017-07-28 16:54:12 +08:00
    @yunkchen 还有比最后一种更离奇的格式。但是人眼可以离开看出来。所以才需要机器学习
    billion
        10
    billion  
    OP
       2017-07-28 16:55:04 +08:00
    @Kilerd 我希望它能跟我我输入的字符串和这个字符串对应的字典,自己去发现他们之间的转化关系。
    ipconfiger
        11
    ipconfiger  
       2017-07-28 17:06:30 +08:00
    我倒是有个差不多的需求, 就是从 txt 小说里抽取章节标题
    RLib
        12
    RLib  
       2017-07-28 17:06:47 +08:00
    只要每种格式的符号固定, 选取几行数据, 计算出公共符号和变化的范围, 就能大概得出 key 和 value 了
    ikeeper
        13
    ikeeper  
       2017-07-28 17:07:50 +08:00
    简单的问题何必搞复杂呢,
    人:发现了规则,写出了正则;
    机器:费老大劲发现了规则,写出了‘正则’,还不一定百分百正确;
    所以,何必绕一圈呢
    padeoe
        14
    padeoe  
       2017-07-28 18:03:52 +08:00 via iPhone
    斯坦福大学自然语言处理第一课就是正则匹配。正则匹配简单高效,别小瞧啊。
    Thoxvi
        15
    Thoxvi  
       2017-07-28 18:11:16 +08:00 via Android
    py 有个 re.split 可以用正则分割啊,机器学习不嫌麻烦吗…又得找数据又得打标签
    binux
        16
    binux  
       2017-07-28 18:28:44 +08:00   1
    机器学习不是银弹,你都有格式+字典了,直接产生规则不就好了吗。
    你这能用多少种格式呢?你有这时间标注+搞机器学习,手动写规则都写完了。
    aaronzjw
        17
    aaronzjw  
       2017-07-28 22:50:45 +08:00
    杀鸡焉用牛刀啊
    fiht
        18
    fiht  
       2017-07-28 23:21:32 +08:00
    啥都想要机器学习来做...给数据打标签的时间就够把数据分类了。
    数据分类之后根据数据的不同种类正则匹配就能解决 99%了。其他解析不了的 1%根据数据量选择是丢弃还是继续分类。
    spolarbear
        19
    spolarbear  
       2017-07-28 23:28:20 +08:00
    这类有绝对对错判断的命题,用不上机器学习,你是要离散性高还是正确率高?
    est
        20
    est  
       2017-07-28 23:33:24 +08:00 via iPhone
    人能看出来是因为有先验知识。楼主觉得机器能搞定先打 10w 标作为训练样本压压惊
    billion
        21
    billion  
    OP
       2017-07-29 08:44:03 +08:00
    @spolarbear 正确率。
    billion
        22
    billion  
    OP
       2017-07-29 08:46:41 +08:00
    @binux 我有一百万种格式,每一种格式都有一个对应的 dict。不可能每一种都自己写规则。当然,打标签也不会每一种都打。这也是为什么我在帖子的 Append 里面说用深度神经网络而不是普通机器学习算法的原因。
    yemenchun1
        23
    yemenchun1  
       2017-07-29 09:22:23 +08:00 via iPhone
    比较好奇一百万种格式的原始数据是哪些人创造的
    Zzzzzzzzz
        24
    Zzzzzzzzz  
       2017-07-29 22:06:31 +08:00
    你需要的只是 pyparsing
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 02:06 PVG 10:06 LAX 18:06 JFK 21:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86