鱼C论坛

 找回密码
 立即注册
查看: 1001|回复: 12

[已解决]词典中匹配项的提取小问题,谢谢

[复制链接]
发表于 2021-11-30 21:27:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.我有一个dict.txt内容示例如下:
A&A # HH YIN TCBCI NEREIDUL .
B&B # UU BASA J&J GEDEG .
C&C # VV UGEI O&O RR.
D&D # FF G G G G .
R&R # O O O .
“#"前是词条,也就是说是”键“;“#"后面是”释义“是”值“。每个词都以一个空格分隔;每一行都是”键#值“的数据;每一行句号”."前后面都有一个空格。

2.我有一个need.txt里面包含需要从dict.txt寻找的”键“内容(一词一行):例如:
A&A
B&B
C&C
F&F

3.需求是:
        3.1若need里面的词在dict.txt的”键“内容中,且”值“内容中有划线部分词汇那么提取这一行内容。
            提取结果例如:
            A&A # HH YIN TCBCI NEREIDUL .
            B&B # UU BASA J&J GEDEG .
            C&C # VV UGEI O&O RR.

        3.2若need里面的词在dict.txt的”键“内容中,且”值“内容中有就一共有1到7个”空格字符“那么提取这一行内容。
            提取结果例如:D&D # FF G G G G .

        3.3若need里面的词不在dict.txt那么生成一个"OOV"的文件写入这些未能匹配的词集。


看着我写的有点多,但是需求很简单,希望得到您的帮助,期待您的回复,谢谢。
最佳答案
2021-12-1 07:34:57
本帖最后由 lightninng 于 2021-12-1 07:54 编辑
Amgalang 发表于 2021-12-1 01:17
a = open(r"C:%users\amgalang\Desktop\dict.txt")
dict = a.readlines()
c = open(r"C:%users\amgalan ...


早上没时间试,看到的可能有问题的点
1、"BASA" "GEDEG"in d.split('#')[-1]这半句,应该两个词不能放在一起判断,我不确定你这句是不是有问题,但是写成下面这样肯定没问题"BASA" in d.split('#')[-1] or "GEDEG" in d.split('#')[-1]
2、" " < 7 in d.split('#')[-1]这半句绝对不可能对,请不要随便创造语法,里需要使用某个方法或函数统计字符串中空格的数量,然后用这个方法或者函数的返回值去和7比较大于0且小于7就满足条件~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-30 21:42:18 | 显示全部楼层
我为什么感觉我前些日子刚回答过个和你这个几乎一样的问题。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 22:18:02 | 显示全部楼层
lightninng 发表于 2021-11-30 21:42
我为什么感觉我前些日子刚回答过个和你这个几乎一样的问题。。。。

哈哈哈,感谢您的关注,与上次 那个有几处相同点,但这次减少 提取限制了,因为上次内个代码拿到别的文档就不能适应 出现一些问题,所以还希望您的帮助,谢谢哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 22:24:42 | 显示全部楼层
lightninng 发表于 2021-11-30 21:42
我为什么感觉我前些日子刚回答过个和你这个几乎一样的问题。。。。

我回去 再好好读读代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-30 22:45:42 | 显示全部楼层
Amgalang 发表于 2021-11-30 22:18
哈哈哈,感谢您的关注,与上次 那个有几处相同点,但这次减少 提取限制了,因为上次内个代码拿到别的文档 ...

跟上次没啥不同啊,,改一下判断语句就行了啊,先判断有没dict有没有这个词,没有就加到未匹配的列表里,后面再输出到文件;dict有这个词,用正则表达式去再释义里面做匹配,划线部分和空格都作为匹配项,找到匹配项就提取,没找到就不提取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-1 01:17:45 | 显示全部楼层
lightninng 发表于 2021-11-30 22:45
跟上次没啥不同啊,,改一下判断语句就行了啊,先判断有没dict有没有这个词,没有就加到未匹配的列表里, ...

a = open(r"C:\Users\amgalang\Desktop\dict.txt")
dict = a.readlines()
c = open(r"C:\Users\amgalang\Desktop\need.txt")
need = c.readlines()
list1 = []
for n in need:
       n = n.strip()
       for d in dict:
              if n in d.split('#')[0] and "TCBCI NEREIDUL"in d.split('#')[-1]:
                     list1.append(d)
              if n in d.split('#')[0] and "BASA" "GEDEG"in d.split('#')[-1]:#这一行是想着值里有"BASA","GEDEG"这俩词才提取那一行,没成功
                     list1.append(d)
              if n in d.split('#')[0] and " " < 7 in d.split('#')[-1]:#这一行是想值里有小于7的"空格符"那么提取这一行,没成功
                     list1.append(d)
e = open(r"C:\Users\amgalang\Desktop\result.txt","w")
e.write('\n'.join(list1))
e.close()


两个注释没成功,怎么办呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 07:34:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lightninng 于 2021-12-1 07:54 编辑
Amgalang 发表于 2021-12-1 01:17
a = open(r"C:%users\amgalang\Desktop\dict.txt")
dict = a.readlines()
c = open(r"C:%users\amgalan ...


早上没时间试,看到的可能有问题的点
1、"BASA" "GEDEG"in d.split('#')[-1]这半句,应该两个词不能放在一起判断,我不确定你这句是不是有问题,但是写成下面这样肯定没问题"BASA" in d.split('#')[-1] or "GEDEG" in d.split('#')[-1]
2、" " < 7 in d.split('#')[-1]这半句绝对不可能对,请不要随便创造语法,里需要使用某个方法或函数统计字符串中空格的数量,然后用这个方法或者函数的返回值去和7比较大于0且小于7就满足条件~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-1 08:13:52 | 显示全部楼层
lightninng 发表于 2021-12-1 07:34
早上没时间试,看到的可能有问题的点
1、"BASA" "GEDEG"in d.split('#')[-1]这半句,应该两个词不能放 ...

早上好,好的 两个词匹配的学到了,现在在尝试用 count来做统计的内个,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-1 08:36:59 | 显示全部楼层
Amgalang 发表于 2021-12-1 08:13
早上好,好的 两个词匹配的学到了,现在在尝试用 count来做统计的内个,谢谢

没能成功,我想这先统计value里的空格,但是 没能实现,希望得到帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 09:25:22 | 显示全部楼层
Amgalang 发表于 2021-12-1 08:36
没能成功,我想这先统计value里的空格,但是 没能实现,希望得到帮助

百度,python 统计字符串中的字符个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 15:39:01 | 显示全部楼层
lightninng 发表于 2021-11-30 22:45
跟上次没啥不同啊,,改一下判断语句就行了啊,先判断有没dict有没有这个词,没有就加到未匹配的列表里, ...

实现了,谢谢噢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 17:16:34 | 显示全部楼层

加油~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-3 08:23:21 | 显示全部楼层

早上好,统计一行里字符串内个 还是没能实现,您看看我的代码:
import re
a = open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8")
dict = a.readlines()
list1=[]
for i in dict:
       if " " in i.split('#')[-1]:
              list1.append(i.count(" "))
       if "&" in i.split('#')[0] and i.count(" ")<4 in i.split('#')[-1]:
              print(i)

想着 “#”前带有“&”的词若“#”后面空格字数小于4 那么提取这一行数据,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 05:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表