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

有一个学校专业的字符串,怎样识别出哪部分是学校名称和专业名称( Java 实现)

  •  
  •   axwz88 · 48 天前 · 2325 次点击
    这是一个创建于 48 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如一个字符串“北京大学软件工程”,“北京大学”和“软件工程”分别是学校名称和专业名称的变量,
    假如有 2000 个学校和 1000 个专业,怎么识别出哪一部分是学校名称,哪一部分是专业名称呢?
    用 2000 个学校去查询,再用 1000 个专业去查询,那查一次最多要查 3000 次,请问大家有没有好的解决方案。
    28 回复  |  直到 2019-09-27 13:06:54 +08:00
        1
    OhYee   48 天前 via Android
    直接用大学或者学院把字符串分开就行吧,应该所有学校都是这俩词结尾吧
        2
    RicardoY   48 天前 via Android
    绝大部分学校按照大学和学院截断就可以解决问题了吧..截断以后查一下 hashset 确认一下是不是一个合法的解
        3
    Enya   48 天前 via iPhone
    先截学院,后截大学。

    因为会有类似北京航空航天大学大学北海学院这种存在。
        4
    lihongming   48 天前 via iPhone
    用 SVM 吧,万一有很多不按规则说话的呢?
        5
    axwz88   48 天前 via Android   ♥ 1
    @OhYee
    @RicardoY
    @Enya
    感谢回复,截断的确是个最直接的方法,但很多学校名称不规则,比如"XX 集团 XX 所",还有些大学有注释,比如"中国石油大学(华东)",所以这种办法就行不通了。
        6
    Yourshell   48 天前 via iPhone
    想匹配不规则字符串的话只有 ml 之类的了
        7
    aguesuka   48 天前 via Android
    所有大学,塞一个 trietree 里面,先匹配大学,后面的就是专业课。嫌麻烦可以用 treemap
        8
    AX5N   48 天前
    2000 个学校不算多,我觉得直接预先把所有学校拉出来最好。
        9
    wmc   48 天前 via Android   ♥ 1
    想起《数学之美》中 Google 地图关于地址信息的解析,这应该算是一种比较简单的上下文有关文法,Google 的做法是用自动机来进行 街道->地区->城市->州 的各个部分的匹配,感觉思路可能比较接近🤔
        10
    littlecap   47 天前
    先下载一个高校库,然后匹配一下就好了。如果需要我可以发给你。
        11
    mcorley   47 天前
    excel 导出,分列,剩下几十个特殊的手动一下就好了
        12
    nevin47   47 天前 via Android
    我要把这个帖子转给我的同事哈哈哈哈。

    自从我司开始考试,我就天天听到一个论调就是考算法的东西完全没用😂😂😂终于发现一个实际问题了

    这个问题如果不用数据库的话,绝对用 hash 最快啊,逐一阶段,然后去 hash 里面比对,就立刻找到属于哪个学校了
        13
    passerbytiny   47 天前
    人是怎么处理的,程序就怎么处理,以下为自动化层次逐步增高的几种方式:
    逐条手工识别和拆分

    按已知规则自动拆分,然后人工逐条审核和纠正

    同上,每次审核后再将新发现的规则融合到拆分规则中(已初步是 AI )

    上一层次执行多次后,将审核、融合新规则也弄成程序自动处理(已是 AI 或者人工智障)
        14
    passerbytiny   47 天前
    @nevin47 #11 ⁉ hash 还能部分匹配原文?
        15
    zenan9001   47 天前
    先考虑通用情况,把"大学"作为截断关键字,再考虑特殊情况,括号什么的比较少,可以特殊处理
        16
    no1xsyzy   47 天前
    @passerbytiny
    做 hashtable,然后拿部分去判断。
    能从 3000 降到 length(输入字符串)^2
        17
    dog82   47 天前
    先粗匹配学校,然后人肉修正一遍,专业的名字用正则就行
        18
    RicardoY   47 天前 via Android
    @aguesuka 用 trie 确实是一个好办法
        19
    no1xsyzy   47 天前
    @passerbytiny BTW,你的世界不完整,推荐用 Red 而不是 Block /t/592670 /t/596604
        20
    LeeSeoung   47 天前
    正则。。
        21
    muxixi   47 天前
    都是 学校+院系的组合

    先排序 按前几个字符分组,然后随便算算相同的前缀,找出学校名,然后院系就出来了。
        22
    LudwigWS   47 天前
    V 站各路大神啊
        23
    MaiKuraki   47 天前
    正则表达式?
        24
    wysnylc   47 天前
    正则筛选+人工纠错
    换什么方式都逃不掉人工纠错
        25
    yianing   47 天前 via iPhone
    想到了最长前缀匹配,计算机网络学了这个匹配路由的,可以用来匹配学校吧
        26
    axwz88   47 天前 via Android
    @aguesuka
    @nevin47
    @wmc
    @no1xsyzy

    感谢,用 ac 自动机可以高效实现,trie 树和 kmp 算法实现 ac 自动机,用 hashtable 对字符串碰撞也可以实现,受教了,没想到自己这么菜
        27
    axwz88   47 天前 via Android
    每条回复我都认真看了,的确解决问题的方式不止一种,综合大家的回复我考虑用 ac 自动机去实现
        28
    axwz88   47 天前 via Android
    感谢大家
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   961 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 32ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    ♥ Do have faith in what you're doing.