特定词汇在B.txt中出现时标记的实现 求助 谢谢
我有两个"utf-8"的文件分别是A.txt和B.txt,A里面有几百个词,一词一行的格式;B里是数字与词的文本,每个词后面都有“空格+.(英文句号)"一行可能有多个这样的词集。想实现A.txt中的词 若出现在B.txt那么给该词后面加个":Yn"的标注。示例如下:
A.txt:
AA
CC
DF
B.txt
1#2#3#:AA . CC . BB .
3# 4#5#DF . AA . 1#2#3#:AA . CC .
期望得到的结果:
1#2#3#:AA:Yn . CC:Yn . BB .
3# 4#5#DF:Yn . AA:Yn . 1#2#3#:AA:Yn . CC:Yn .
因为还是个小白,所以需要大佬的帮助,希望您练个手 实现一下 谢谢哒,我张候目前的等级有限只能发 10个鱼币,请谅解。谢谢。
with open('A.txt',encoding='utf-8',mode='r') as f:
data_a=
print(data_a)
with open('B.txt',encoding='utf-8',mode='r') as f:
data_b=
data_b='******'.join(data_b)
print(data_b)
import re
new_data=[]
temp_b=data_b
for temp_a in data_a:
#print(temp_a)
repl=temp_a+':Yn'
temp_b=re.sub(f'({temp_a}).*?',repl,temp_b)
#print(data_b)
new_data=temp_b.split('******')
print(new_data)
提供一个可能的思路,直接把B.txt里面的所有内容用read方法读取成一个字符串string_b,然后用A.txt里面的所有词依次作为分隔符,用split方法把string_b切片,比如A.txt的第一个词是AA,
split_list=string_b.split("AA")
当split_list只有一项时,表示B.txt中没有AA这个词,否则split_list就会有多项,比如你的例子中split_list的值就应该是["1#2#3#:"," . CC . BB .\n3# 4#5#DF . "," . 1#2#3#:AA . CC ."]三项,然后用join方法以"AA:Yn"作为连接符把他们连接起来就行了,
"AA:Yn".join(split_list)
只提供一个思路,具体的实现,楼主最近应该一直在做这个项目吧,相信完整的实现对你来说不是难事 with open('A.txt') as f:
words = if l[-1]=='\n' else l for l in f]
# print(words)
with open('B.txt') as f:
bStr = ''.join(f.readlines())
# print(bStr, '\n-----------------')
for word in words:
# print(word)
if word in bStr:
bStr = bStr.replace(word, word + ":Yn")
print(bStr)# 结果 lightninng 发表于 2021-12-10 22:36
提供一个可能的思路,直接把B.txt里面的所有内容用read方法读取成一个字符串string_b,然后用A.txt里面的所 ...
感谢您的关注和给予的思路,不过我是个文科生,确实这方面的知识欠缺,也没多实践,最近就是在写个小论文,在查些例子,哈哈哈 谢谢哒 阿奇_o 发表于 2021-12-10 23:16
感谢您的回复,代码跑完后确实能得到我的结果,但是 我在别的文档上跑后发现问题了,具体而言:
新的A.txt内容是两个词用“=”号链接的词组,一词一行的模式,如下图A.txt所示。目前出现的情况是代码跑完后如notepad++所示:
代码把A.txt中一个词的=号前面的也 当作了关键词,然后在B.txt里标注了,所以在B.txt里很多词都标注在中间了,且因为关键词不是“整体的词”在查找,所以在B.txt里出现了好多无效标注。
希望您能稍改下代码,谢谢哒。
Amgalang 发表于 2021-12-10 23:57
感谢您的回复,代码跑完后确实能得到我的结果,但是 我在别的文档上跑后发现问题了,具体而言:
新的A ...
词组?关键词不是"整体的词"?。。
你的意思是,相当于是 把像"东张西望"和"东倒西歪"里的 "西"字 做标记,而且 还要区分是前者还是后者?
——不能全部替换,只允许标记(替换)特定意思的 词组里的 某部分字符 ?。。
那,那你这像 自然语言处理 属于是了,暂时 爱莫能助。
ps: 或许我理解有误,还不太理解你的问题描述~ 自然语言,的确就是 既强大又苍白~
阿奇_o 发表于 2021-12-11 03:13
词组?关键词不是"整体的词"?。。
你的意思是,相当于是 把像"东张西望"和"东倒西歪"里的 "西"字 做 ...
可能是我说的没明白,不是的你想的那样,想复杂了,我的想法是 整词整词 的匹配,但是目前代码跑完后显示的是 “一半词”的匹配,未能整词匹配。我的整词是一行一个词的模式在保存,中间有“=”号在做连接。例如:
A.txt
东=张=西=望(一行可能有多个=符号,也可能没有)
B.txt
4#5#DF . AA . 1#2#3#:AA . CC . 东=张=西=望 .
希望得到的结果是:
4#5#DF . AA . 1#2#3#:AA . CC . 东=张=西=望:Yn .
而目前代码·跑完后显示是:
4#5#DF . AA . 1#2#3#:AA . CC . 东:Yn张:Yn西:Yn望:Yn .(这种类型)
您看一看,谢谢 期待回复。 Amgalang 发表于 2021-12-11 08:29
可能是我说的没明白,不是的你想的那样,想复杂了,我的想法是 整词整词 的匹配,但是目前代码跑完后显示 ...
我原来的代码就是按行分割出"一行一个词"呀。。你这里跑出来的怎么是按"="来分割?。。
——你自己折腾吧,搞不清楚你到底要什么样的效果。。
先自己搞清楚文本读取的各种操作吧,然后你想要什么效果,自己试验看看能不能实现。
实在不行,再把完整代码和文本数据,以及自己的需求和思路,都发上来。
或直接在身边找熟悉python的朋友来指导指导。 试试正则来匹配吧 阿奇_o 发表于 2021-12-11 15:34
我原来的代码就是按行分割出"一行一个词"呀。。你这里跑出来的怎么是按"="来分割?。。
——你自己折 ...
刚试成功了,代码没错误,原来是A.txt包含了一些不需要标注的词,让我误以为 分割的不对,哈哈哈 以后得好好看文件了,再次感谢。{:10_287:} 疾风怪盗 发表于 2021-12-11 16:17
谢谢老哥的回复,成功了,原来我的A.txt有问题来着,再次感谢哒{:10_287:} 来学习了 抱歉,认错人了,之前有个鱼油,问的和你这非常类似的问题,我前后回复过他两个帖子,我以为又是他~~~ lightninng 发表于 2021-12-11 21:45
抱歉,认错人了,之前有个鱼油,问的和你这非常类似的问题,我前后回复过他两个帖子,我以为又是他~~~
哈哈哈,早上好{:10_287:}
页:
[1]