查看: 63224|回复: 7
打印 上一主题 下一主题

[工具] 写了个小脚本自动做 / 短语拆分

[复制链接]

该用户从未签到

95

主题

554

回帖

2万

积分

翰林院编修

终身学习者

Rank: 11Rank: 11Rank: 11Rank: 11

积分
24557

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

跳转到指定楼层
1
发表于 2016-9-23 18:02:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 henices 于 2018-1-5 17:32 编辑

简单处理一下,没有处理单词重复出现问题。能够应付 / 多次出现的情况。

  1. #! /usr/bin/python

  2. import sys
  3. import logging

  4. def find_node(s):
  5.     graph = {}
  6.     for i in s.split(' '):
  7.         for j in i.split('/'):
  8.             if j not in graph:
  9.                 graph[j] = []
  10.             else:
  11.                 return None
  12.     return graph
  13.    
  14. def find_edge(s, graph):

  15.     l = s.split(' ')
  16.     for i in xrange(len(l)-1):
  17.         if '/' not in l[i + 1]:
  18.             for j in l[i].split('/'):
  19.                 graph[j].append(l[i + 1])
  20.         else:
  21.             for m in l[i + 1].split('/'):
  22.                 for n in l[i].split('/'):
  23.                     graph[n].append(m)
  24.     return graph



  25. def find_path(start, graph, path=[], paths=[]):

  26.     path = path + [start]
  27.     if not graph.has_key(start):
  28.         return None

  29.     if graph[start] == []:
  30.         return path

  31.     for i in graph[start]:
  32.         newpath = find_path(i, graph, path, paths)
  33.         if newpath:
  34.             paths.append(newpath)

  35.     return None

  36. out_fd = open('lnk.mdict', 'w')

  37. with open(sys.argv[1], 'r') as f:
  38.     for line in f:
  39.         line_ = line.strip()
  40.         g = find_node(line_)
  41.         if not g:
  42.             print '[ERR]: ', line_
  43.             continue

  44.         if len(line_.split(' ')) == 1:
  45.             print '[ERR]: ', line_
  46.             continue

  47.         logging.debug('[OK]: %s' % line_)

  48.         g = find_edge(line_, g)

  49.         for i in line_.split(' ')[0].split('/'):
  50.             paths = []
  51.             find_path(i, g, [], paths)
  52.             logging.debug(paths)

  53.             for path in paths:
  54.                 out_fd.write(' '.join(path) + "\n")
  55.                 out_fd.write('@@@LINK=%s\n' % line_)
  56.                 out_fd.write('</>\n')

  57. out_fd.close()
复制代码


以下内容需要积分高于 200 才可浏览

py.zip (718 Bytes, 下载次数: 42)


评分

2

查看全部评分

  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    254

    主题

    4264

    回帖

    7万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    79050

    小蜜蜂章笑傲江湖章灌水大神章QQ 章

    QQ
    2
    发表于 2018-1-5 01:23:24 | 只看该作者
    henices 兄:
           短语拆分的程式能否提供txt file
    复制代码 實在太多亂碼
    謝謝喔
  • TA的每日心情
    开心
    2023-3-8 11:42
  • 签到天数: 410 天

    [LV.9]以坛为家II

    5

    主题

    787

    回帖

    6013

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    6013

    灌水大神章

    3
    发表于 2018-1-5 11:32:30 | 只看该作者
    这个不靠谱吧,拆分问题基本上只能手工操作,充其量能根据个别搭配定向操作,否则一定误伤太多。

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    4
     楼主| 发表于 2018-1-5 14:01:45 | 只看该作者
    fuyouyu 发表于 2018-1-5 11:32
    这个不靠谱吧,拆分问题基本上只能手工操作,充其量能根据个别搭配定向操作,否则一定误伤太多。 ...

    很多特定情况是可以自动处理的,但是有些情况确实是只能手工操作。
  • TA的每日心情
    开心
    2023-3-8 11:42
  • 签到天数: 410 天

    [LV.9]以坛为家II

    5

    主题

    787

    回帖

    6013

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    6013

    灌水大神章

    5
    发表于 2018-1-5 14:58:55 | 只看该作者
    本帖最后由 fuyouyu 于 2018-1-5 15:00 编辑
    henices 发表于 2018-1-5 14:01
    很多特定情况是可以自动处理的,但是有些情况确实是只能手工操作。


    如果只是为了满足查得率,倒也无可厚非,但对于我这种有强迫症的人就接受不了。一般只好用正则一个一个来。曾经试图拆分H大的21,结果因为太复杂而放弃。

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    6
     楼主| 发表于 2018-1-5 15:21:35 | 只看该作者
    fuyouyu 发表于 2018-1-5 14:58
    如果只是为了满足查得率,倒也无可厚非,但对于我这种有强迫症的人就接受不了。一般只好用正则一个一个来 ...

    我实现了一个很复杂的算法最终把这个任务基本完成了,但是有存在拆错的情况,
    但是主要是为了查得率 ,现在我基本已经不太追求查得率了。

    就像 eatingfish 所说,到相关词条查找内容是一种基本能力。

    该用户从未签到

    95

    主题

    554

    回帖

    2万

    积分

    翰林院编修

    终身学习者

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    24557

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    7
     楼主| 发表于 2018-1-5 17:33:06 | 只看该作者
    喬治兄 发表于 2018-1-5 01:23
    henices 兄:
           短语拆分的程式能否提供txt file
    复制代码 實在太多亂碼

    已經提供,代碼寫的太亂,無怪。
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    254

    主题

    4264

    回帖

    7万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    79050

    小蜜蜂章笑傲江湖章灌水大神章QQ 章

    QQ
    8
    发表于 2018-1-5 17:55:19 | 只看该作者
    henices 发表于 2018-1-5 17:33
    已經提供,代碼寫的太亂,無怪。

    henices 兄:
              Thanks a lot, "已經提供,代碼寫的太亂,無怪。" It's ok, very good