求 A文件中词汇的 B文件语料中出现的词频统计
上午好,各位鱼友,我有了一个小需求,求A文件中的每个词在另一个B语料中的词频统计,但是 我的循环有些报错,希望大家练练手 给新手一个代码,谢谢。
1.模拟A文件中的内容(一词一行):
AAA
BBB
CCC
2.模拟B文件语料中的内容(以空格隔开词汇,以英文句号隔开句子,但有些停用词,停用词和词汇连在一起(停用词怎么处理?可以忽略?还是删除?)):
AAA BBB FFF GGG HHH JJJ KKK. LLL? TTT UUU <EEE> 123 890 OOO CCC AAA VVV BBB.
3.希望得到的新文件统计结果格式:
词汇,词频
AAA,2
BBB,2
CCC,1
谢谢大家,祝大家拥有美好的一天。 本帖最后由 城中城 于 2020-9-29 12:06 编辑
def find_text(each_keyword, keyword, i = 0, num = 0):
if each_keyword.find(keyword, i) > -1: #判断查找的字符串中是否有想要的子字符串
i = each_keyword.find(keyword, i) + 1 #运用的是find(sub[, start[, end]])检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。
num += 1 #出现的子字符串+1
return find_text(each_keyword, keyword, i, num) #再次进入函数循环进行判断, 该字符串后面是否有再出现想要的子字符串
else:
return num #盖字符串没有想要查找的子字符串的时候跳出循环
def query_path(key_file, target_file):
key_name = {}
with open(key_file, encoding = 'UTF-8') as fp:
for each_line in fp:
temp = each_line.rstrip() #去除/n
key_name = 0 #把想查询的每一个子字符串添加到字典中
with open(target_file, encoding = 'UTF-8') as fp:
for each_line in fp:
for key in key_name: #
num = find_text(each_line, key) #返回该行出现子字符串的次数
key_name += num #子字符串的次数进行添加
print(key_name)
print('将该文件放入你要搜索的文件中')
key_file = input("请输入你的关键字文件(txt):")
target_file = input("请输入你的目标文件(txt):")
query_path(key_file, target_file) 本帖最后由 城中城 于 2020-9-29 10:32 编辑
partition(sub)
找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 ('原字符串', '', '') {:10_256:}{:10_256:} 城中城 发表于 2020-9-29 10:30
partition(sub)
找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包 ...
不好意思,我需要 代码 哈哈哈 wzdr 发表于 2020-9-29 10:39
哈哈哈,又在帮我上墙,谢谢{:10_311:} 最简单的循环:
with open('A.txt', 'r', encoding='utf-8') as f1:
a = f1.readlines()
with open('B.txt', 'r', encoding='utf-8') as f1:
b = f1.read().split(' ')
print(a)
print(b)
count = dict()
for i in a:
i = i.replace('\n', '')
count = 0
for j in b:
if j.find(i) == 0:
count += 1
print(count)
将该文件放入你要搜索的文件中
请输入你的关键字文件(txt):2.txt
请输入你的目标文件(txt):1.txt
{'AAA': 4, 'BBB': 4, 'CCC': 2} 疾风怪盗 发表于 2020-9-29 11:08
最简单的循环:
老哥你这里没做一个处理 就是一行可能出现多个AAA
但是你只是一行中只要出现AAA就+1 本帖最后由 疾风怪盗 于 2020-9-29 11:53 编辑
城中城 发表于 2020-9-29 11:41
老哥你这里没做一个处理 就是一行可能出现多个AAA
但是你只是一行中只要出现AAA就+1
楼主说的是以空格隔开词汇
我做了个处理,直接空格切片,切出来每个元素都是一个词汇,不会出现两个AAA在一个词汇吧
['AAA\n', 'BBB\n', 'CCC']
['', 'AAA', 'BBB', 'FFF', 'GGG', 'HHH', 'JJJ', 'KKK.', 'LLL?', 'TTT', 'UUU', '<EEE>', '123', '890', 'OOO', 'CCC', 'AAA', 'VVV', 'BBB.']
{'AAA': 2, 'BBB': 2, 'CCC': 1}
和你的结果一样的
将该文件放入你要搜索的文件中
请输入你的关键字文件(txt):A.txt
请输入你的目标文件(txt):B.txt
{'AAA': 2, 'BBB': 2, 'CCC': 1} 城中城 发表于 2020-9-29 11:35
哇,大佬哥 厉害了,哈哈哈 谢谢 已完美解决,正在学习您的代码中,您能给到注释 那就更好了,再次谢谢。{:10_275:} 疾风怪盗 发表于 2020-9-29 11:08
最简单的循环:
谢谢您的代码,正在学习代码中,谢谢。 疾风怪盗 发表于 2020-9-29 11:51
楼主说的是以空格隔开词汇
我做了个处理,直接空格切片,切出来每个元素都是一个词汇,不会出现两个AA ...
哦有道理这我看太仔细 城中城 发表于 2020-9-29 11:59
哦有道理这我看太仔细
如果就按楼主说的情况
你这写的太复杂了,不需要这么多代码的,就简单的循环匹配就行了,当然如果数据量大了,就效率低了 Amgalang 发表于 2020-9-29 11:56
谢谢您的代码,正在学习代码中,谢谢。
注释写完了
疾风怪盗 发表于 2020-9-29 12:02
如果就按楼主说的情况
你这写的太复杂了,不需要这么多代码的,就简单的循环匹配就行了,当然如果数据量 ...
为了最佳答案不择手段的我{:5_91:} 疾风怪盗 发表于 2020-9-29 12:02
如果就按楼主说的情况
你这写的太复杂了,不需要这么多代码的,就简单的循环匹配就行了,当然如果数据量 ...
真心谢谢您的高效且易懂的回答,心中的大佬和最佳答案献给您,再次感谢{:10_275:}{:10_275:}{:10_275:} 疾风怪盗 发表于 2020-9-29 11:08
最简单的循环:
刚发现,原来是老哥您阿,没记好您的论坛用名,哈哈哈哈哈,记住了 难怪 代码这么6 哈哈哈 谢谢老哥
页:
[1]