Amgalang 发表于 2021-11-30 21:27:22

词典中匹配项的提取小问题,谢谢

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"的文件写入这些未能匹配的词集。


看着我写的有点多,但是需求很简单,希望得到您的帮助,期待您的回复,谢谢。

lightninng 发表于 2021-11-30 21:42:18

我为什么感觉我前些日子刚回答过个和你这个几乎一样的问题。。。。

Amgalang 发表于 2021-11-30 22:18:02

lightninng 发表于 2021-11-30 21:42
我为什么感觉我前些日子刚回答过个和你这个几乎一样的问题。。。。

哈哈哈,感谢您的关注,与上次 那个有几处相同点,但这次减少 提取限制了,因为上次内个代码拿到别的文档就不能适应 出现一些问题,所以还希望您的帮助,谢谢哒{:10_287:}

Amgalang 发表于 2021-11-30 22:24:42

lightninng 发表于 2021-11-30 21:42
我为什么感觉我前些日子刚回答过个和你这个几乎一样的问题。。。。

我回去 再好好读读代码

lightninng 发表于 2021-11-30 22:45:42

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

跟上次没啥不同啊,,改一下判断语句就行了啊,先判断有没dict有没有这个词,没有就加到未匹配的列表里,后面再输出到文件;dict有这个词,用正则表达式去再释义里面做匹配,划线部分和空格都作为匹配项,找到匹配项就提取,没找到就不提取

Amgalang 发表于 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('#') and "TCBCI NEREIDUL"in d.split('#')[-1]:
                     list1.append(d)
            if n in d.split('#') and "BASA" "GEDEG"in d.split('#')[-1]:#这一行是想着值里有"BASA","GEDEG"这俩词才提取那一行,没成功
                     list1.append(d)
            if n in d.split('#') 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()


两个注释没成功,怎么办呢

lightninng 发表于 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就满足条件~

Amgalang 发表于 2021-12-1 08:13:52

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

早上好,好的 两个词匹配的学到了,现在在尝试用 count来做统计的内个,谢谢

Amgalang 发表于 2021-12-1 08:36:59

Amgalang 发表于 2021-12-1 08:13
早上好,好的 两个词匹配的学到了,现在在尝试用 count来做统计的内个,谢谢

没能成功,我想这先统计value里的空格,但是 没能实现,希望得到帮助

lightninng 发表于 2021-12-1 09:25:22

Amgalang 发表于 2021-12-1 08:36
没能成功,我想这先统计value里的空格,但是 没能实现,希望得到帮助

百度,python 统计字符串中的字符个数

Amgalang 发表于 2021-12-2 15:39:01

lightninng 发表于 2021-11-30 22:45
跟上次没啥不同啊,,改一下判断语句就行了啊,先判断有没dict有没有这个词,没有就加到未匹配的列表里, ...

实现了,谢谢噢

lightninng 发表于 2021-12-2 17:16:34

Amgalang 发表于 2021-12-2 15:39
实现了,谢谢噢

加油~~~

Amgalang 发表于 2021-12-3 08:23:21

lightninng 发表于 2021-12-2 17:16
加油~~~

早上好,统计一行里字符串内个 还是没能实现,您看看我的代码:
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('#') and i.count(" ")<4 in i.split('#')[-1]:
            print(i)

想着 “#”前带有“&”的词若“#”后面空格字数小于4 那么提取这一行数据,谢谢
页: [1]
查看完整版本: 词典中匹配项的提取小问题,谢谢