作者moodoa3583 (金牌台湾啤酒)
看板Python
标题[问题] 字串的关键字提取
时间Thu Mar 5 09:41:10 2020
嗨大家好,我有一个表格像是这样
http://i.imgur.com/ld7tHmC.jpg
最後一栏Note是这个球员的受伤资讯,可以看到有 right hamstring injury、concussion
而我现在只需要部位不需要其他描述,例如 sore lower back我只需要back,right knee injury只需要knee。
我第一个想法是把所有部位集中成一个list,然後split字串做mapping,但这个做法有点费时。
第二个想法是搜集形容词并抓形容词後的单字,但资料的字串顺序又不是那麽整齐。
想问各位有什麽好的提取法吗?
附上网址
https://reurl.cc/xZxR7E
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.30.149 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1583372474.A.EAB.html
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 09:45:21
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 09:46:25
1F:→ bjchiou: 抓right left後的第一个字,其他另外设计? 03/05 09:49
这有点像我的想法2,但因为我有约莫2万笔资料,排序都不完全一样,而除了right,left之外也有很多不同的形容词,所以这个想法有点难度
2F:→ ddavid: 我最近才解决一个很类似的问题(但复杂很多),我只能说以 03/05 09:56
3F:→ ddavid: 你这个问题的规模,第一种想法有可能反而会是实作最快的。 03/05 09:57
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 09:58:12
4F:→ ddavid: 第二个想法只能做为万一出现不在列表中的部位时,尝试自动 03/05 09:59
5F:→ ddavid: 抓取部位的候补想法 03/05 09:59
6F:→ ddavid: 因为你的范围限定在球员,常见伤病种类会有一定的范围,第 03/05 10:00
7F:→ ddavid: 一种想法未必如想像中耗时。而且可以在有列表未出现的案例 03/05 10:01
8F:→ ddavid: 时再直接针对该案例补充关键字即可,不需要要求第一次建立 03/05 10:01
9F:→ ddavid: List就是完整的 03/05 10:01
10F:→ ddavid: 或者也可反过来,你先进行第二种想法做为人力添加关键字的 03/05 10:02
11F:→ ddavid: 辅助,这样也可以节省一些时间 03/05 10:03
12F:推 papple23g: 维持第一个想法+1 如果该栏有未包含部位就报错 直到没 03/05 10:04
13F:→ papple23g: 有报错为止 03/05 10:04
14F:→ papple23g: assert all((body_part in note_text) for body_part i03/05 10:04
15F:→ papple23g: n body_part_list),'需要更新身体部位的栏位:'+note_te03/05 10:04
16F:→ papple23g: xt03/05 10:04
17F:→ ddavid: 我自己解的问题是用多重机制共同验证来帮每个关键字算积分03/05 10:05
18F:→ ddavid: 做排名然後优先从高分关键字选下来,但那是因为我的关键字03/05 10:06
19F:→ ddavid: 种类甚至无法限定在名词,还可能是一个句子。你这work单纯03/05 10:07
20F:→ ddavid: 许多,我想是不用这麽费工。03/05 10:07
了解,感谢以上大大,那我先以想法1来做,有什麽更好的解法再丢上来
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 12:31:57
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 12:32:16
21F:→ alvinlin: 为什麽不用regex? 03/05 14:51
22F:→ alvinlin: 把身体部位写成pattern比对即可 03/05 14:52
这也是接近想法1,但比较不好处理的是我不知道全部的身体部位,而且里面也有提到像是illness, concussion 等症状,这也是我想留下来的
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 15:31:13
23F:→ alvinlin: 其实是不太一样。还有另一个选择PyParsing 03/05 17:14
25F:→ alvinlin: docs/pycon06-IntroToPyparsing-notes.pdf 03/05 17:39
26F:推 ddavid: 我是总觉得这个问题规模应该不至於要搞到分析语句词性XD 03/05 18:15
27F:→ ddavid: NBA球员范围而已,光是总量可能都未必多到哪里去,部位名 03/05 18:16
28F:→ ddavid: 称也应该重复使用的字词很多,这应该是人力可及的范围XD 03/05 18:16
29F:→ ddavid: 而且先基本做看看,发现真的不行或将来要扩展到资料很多的 03/05 18:17
30F:→ ddavid: 范围,再补上关键字自动萃取机能来辅助也还来得及 03/05 18:17
31F:推 vi000246: 做词性分析,把名词提取出来 03/05 18:21
32F:推 vi000246: 刚刚用这个试了一下 成功率很高 03/05 18:25
感谢各位的建议,後来是把notes里的字用split切开後丢进一个list,去掉长度为1的废字後做Counter,然後再把left,right等出现很多次的形容词去除,慢慢留下出想要的字
※ 编辑: moodoa3583 (223.137.30.149 台湾), 03/05/2020 22:44:05
34F:→ moodoa3583: 噢对,如果各位有兴趣知道的话,2000到2020年最多球员 03/05 22:49
35F:→ moodoa3583: 受伤的部位是膝盖,然後依次是脚踝,背部,脚掌,腿後 03/05 22:49
36F:→ moodoa3583: 肌(hamstring ) 03/05 22:49
37F:推 shala: 只能用关键字抓吧 03/07 10:02