Python 如何计算几个txt文件中关键字的频率(csv文件中)
我有一个csv文件,在一列中包含几个关键字。我想计算这些关键字在多个txt文件中出现的频率,并将它们写入一个csv文件中 关键词Python 如何计算几个txt文件中关键字的频率(csv文件中),python,regex,pandas,counter,Python,Regex,Pandas,Counter,我有一个csv文件,在一列中包含几个关键字。我想计算这些关键字在多个txt文件中出现的频率,并将它们写入一个csv文件中 关键词 国际财务报告准则 金融风险 预期产量 公司名称、国际财务报告准则、财务风险 XYZ公司,4,5 我下面的代码非常慢,并且分别计算每个关键字。我需要更简单有效的东西 file_list = [] path = ["/folder1", "/folder2", "/folder3&quo
- 国际财务报告准则
- 金融风险
file_list = []
path = ["/folder1",
"/folder2",
"/folder3"]
for i in tqdm(path):
for filename in os.listdir(i):
with open(os.path.join(i, filename), encoding='ISO-8859-1') as filedata:
text=filedata.read()
string = "".join(filedata.read().split())
ifrs=sum(1 for match in re.finditer(r"\bifrs", text, re.IGNORECASE))
financial_risk = sum(1 for match in re.finditer(r"\bfinancial risk", text, re.IGNORECASE))
count=len(text.split())
res=re.findall("data_(\d+)_", filedata.name)
k=' '.join(res)
file_list.append({'cik': k, 'ifrs':ifrs,'financial risk': financial_risk})
dft=pd.DataFrame(file_list)
dft.to_csv('Risk_Factor_word_count.csv', index=False)
下面是一个使用带pandas和numpy的布尔掩码计算匹配字符串的解决方案:
df = pd.read_csv('{}'.format(filename)) # For given 'filename' in your dir
for line in df.to_numpy(): # Convert each line into a 1D numpy array
# Create boolean masks for a keyword in your keyword dictionary
for keyword in keyword_dictionary:
mask = numpy.isin(line[0].split(),keyword)
# Determine the amount of times keyword is found (True = 1)
keyword_dictionary[keyword] += sum(mask)
您必须将这段代码实现为一个循环,循环遍历您的文件目录。我假设您有一个关键字字典,其结构如下:
keyword_dictionary: {
'ifrs': 0,
'financial_risk': 0,
...
'your_last_keyword':0}
下面是一个使用带pandas和numpy的布尔掩码计算匹配字符串的解决方案:
df = pd.read_csv('{}'.format(filename)) # For given 'filename' in your dir
for line in df.to_numpy(): # Convert each line into a 1D numpy array
# Create boolean masks for a keyword in your keyword dictionary
for keyword in keyword_dictionary:
mask = numpy.isin(line[0].split(),keyword)
# Determine the amount of times keyword is found (True = 1)
keyword_dictionary[keyword] += sum(mask)
您必须将这段代码实现为一个循环,循环遍历您的文件目录。我假设您有一个关键字字典,其结构如下:
keyword_dictionary: {
'ifrs': 0,
'financial_risk': 0,
...
'your_last_keyword':0}
除了一些死的或无用的代码(
tqdm
,string
,count
),恐怕这里没有什么收获。。。你必须阅读所有的文件并在其中搜索关键字。Pandas在这方面不会帮助您,但您未能展示如何构建数据帧或编写输出csv文件。您好,我更新了我的代码。如果您的文件大小与可用内存相比很小,我仍然认为没有什么好处。如果耗尽内存并开始交换,逐行读写可以节省大量内存。除了一些死掉或无用的代码(tqdm
,string
,count
),恐怕这里没有什么收获。。。你必须阅读所有的文件并在其中搜索关键字。Pandas在这方面不会帮助您,但您未能展示如何构建数据帧或编写输出csv文件。您好,我更新了我的代码。如果您的文件大小与可用内存相比很小,我仍然认为没有什么好处。如果耗尽内存并开始交换,逐行读写可以节省大量内存。谢谢你的回答。我有450个关键词。这是否意味着我应该创建450个面具?我想我无法在评论部分明确代码。我将编辑我的回复!我的关键字词典是一个csv文件。好的,上面的代码现在可以使用您导入的词典,并使用其关键字索引的相应实例进行更新。谢谢您的回答。我有450个关键词。这是否意味着我应该创建450个面具?我想我无法在评论部分明确代码。我将编辑我的回复!我的关键字词典是一个csv文件。好的,上面的代码现在可以使用导入的词典,并使用其关键字索引的相应实例进行更新。