V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
IfEles
V2EX  ›  Java

最近遇到一个复杂的需求,不知如何去实现.....

  •  
  •   IfEles · 2019-05-27 08:53:37 +08:00 · 5283 次点击
    这是一个创建于 1767 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对复杂的一段话(里面的商品或者地点信息,这些都是有数据库基础表维护的)筛选出里面的关键信息,拼装成后端(用的是 java,框架是 springboot)可以解析的一条数据,问题就是出在如何解析这条不规则的话,目前想象到的逻辑是想锤子科技开源的大爆炸 Big Bang 那套逻辑,用 HanLP( https://github.com/hankcs/HanLP)的自然语言处理方案来实现中文分词,然后用户去选择需要的关键词,但是选择后的数据拼成哪种形式给后端始终没想到很好的解决方案.回头想这个需求其实只要一纸固定的模板就能解决,硬是要做成这么复杂😂,各位大佬有啥更好的建议或者解决方案吗?小弟才疏学浅能想到的就这么多.
    26 条回复    2019-05-28 12:40:36 +08:00
    sagaxu
        1
    sagaxu  
       2019-05-27 09:02:19 +08:00 via Android
    年薪百万的也来论坛求助吗?
    TomVista
        2
    TomVista  
       2019-05-27 09:15:22 +08:00
    有个叫 结巴 的开源框框
    TomVista
        3
    TomVista  
       2019-05-27 09:16:35 +08:00
    @sagaxu 你俩有过节吗?还是楼主不干人事?或者暴躁老哥在线?
    lihongjie0209
        4
    lihongjie0209  
       2019-05-27 09:25:34 +08:00
    前端只管把 `话` 传到后端, 后端负责分词
    IfEles
        5
    IfEles  
    OP
       2019-05-27 09:28:42 +08:00
    @sagaxu 底层搬砖小码农而已😂
    IfEles
        6
    IfEles  
    OP
       2019-05-27 09:30:32 +08:00
    @TomVista 有开源网站,老哥
    IfEles
        7
    IfEles  
    OP
       2019-05-27 09:35:26 +08:00
    @lihongjie0209 问题就是出在分词的这个地方,如何筛选出关键有用的信息
    sunstar
        8
    sunstar  
       2019-05-27 09:37:21 +08:00 via iPhone
    stopword
    TomVista
        9
    TomVista  
       2019-05-27 09:40:45 +08:00
    @IfEles 训练一个 ai 识别文字中的某类词语. 结巴是一个开源的分词器.
    IfEles
        10
    IfEles  
    OP
       2019-05-27 09:47:44 +08:00
    @TomVista 我看了一下好像,是 Python 的开源项目吧
    LeeSeoung
        11
    LeeSeoung  
       2019-05-27 09:49:10 +08:00
    NLP 领域 了解下 QA 中 是如何筛选出有用信息来回答的。
    TomVista
        12
    TomVista  
       2019-05-27 09:54:24 +08:00
    没见过用 java 搞 ai 的,搭个 Python 服务器完事.
    IfEles
        13
    IfEles  
    OP
       2019-05-27 09:58:26 +08:00
    @TomVista 😂
    leafin
        14
    leafin  
       2019-05-27 10:00:01 +08:00
    “筛选出里面的关键信息”,这个‘关键信息’是什麽呢?
    如果‘关键信息’都已经在你的基础表里面,其实做个简单的正则匹配就行了。
    如果你还想要分析‘商品’和‘地点’的关系,甚至是整句话的情感,又或者你的基础表不能完全包括这些‘关键信息’,那你确实需要 NLP 来进行处理
    magicZ
        15
    magicZ  
       2019-05-27 10:28:11 +08:00
    我们做过类似的, 当时其中情感分析, 关键字处理, 都是 Python 去搞得.
    guyeu
        16
    guyeu  
       2019-05-27 11:02:19 +08:00
    前端分词有点奇怪,应该是后端分词,这个东东应该是后端的一个服务,java 的话可能没什么特别好的轮子,python 的话,结巴分词然后去除停用词就可以。
    IfEles
        17
    IfEles  
    OP
       2019-05-27 13:07:37 +08:00
    @guyeu 现在我用的那个 HanLp 的解决方案也是差不多结巴分词的这样的轮子
    guyeu
        18
    guyeu  
       2019-05-27 15:58:14 +08:00
    @IfEles #17 看起来不错,但是分词对多数需求来说只是第一步。。。重新阅读了一下你的问题,感觉是数据结构没有确定?分词结果不是数组么,直接传给后端指定服务,或者更进一步的需求是什么呢?一般而言都是把尽量完整的信息传到后端,然后让后端去做特定的处理。
    seraphv3
        19
    seraphv3  
       2019-05-27 19:48:56 +08:00
    java 上分词我用过 IKAnalyzer,可以试下
    IfEles
        20
    IfEles  
    OP
       2019-05-27 19:49:36 +08:00
    @guyeu 对的就是数据类型没确定,比如说数据是:x 仔牛奶:5 元 x 师傅方便 3 元,数据库里会维护好商品名称,但是单价可能每次得去这串复杂文字中提取,大概就是这样的需求
    IfEles
        21
    IfEles  
    OP
       2019-05-27 21:00:57 +08:00
    @seraphv3 好的,多谢我去了解一下
    guyeu
        22
    guyeu  
       2019-05-28 10:10:39 +08:00
    @IfEles #20 前端要做这个不是难为人么。。。让后端训练一个专门做这件事的模型去做啊。。。不过我觉得不靠谱,模型是有准确率问题的。。或者语法相对固定的话直接字符串匹配吧。
    IfEles
        23
    IfEles  
    OP
       2019-05-28 10:31:54 +08:00
    @guyeu 我也觉得模型的准确率不可能百分百,只能用关键词字符串去匹配了
    luw2007
        24
    luw2007  
       2019-05-28 11:23:00 +08:00
    里面的商品或者地点信息,这些都是有数据库基础表维护的
    luw2007
        25
    luw2007  
       2019-05-28 11:24:29 +08:00
    里面的商品或者地点信息,这些都是有数据库基础表维护的。
    这就是简单的一个匹配的问题。
    应该由后端自己处理。前端只管传话就好了。

    匹配关键词的方法很多。分词,双尾后缀树,自动机等等。
    sazima
        26
    sazima  
       2019-05-28 12:40:36 +08:00
    有个想法, 分词功能使用 python 的结巴, 用 java 调用就好. 比如借助 thrift.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1482 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:52 · PVG 07:52 · LAX 16:52 · JFK 19:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.