Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算几个txt文件中关键字的频率(csv文件中)_Python_Regex_Pandas_Counter - Fatal编程技术网

Python 如何计算几个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

我有一个csv文件,在一列中包含几个关键字。我想计算这些关键字在多个txt文件中出现的频率,并将它们写入一个csv文件中

关键词

  • 国际财务报告准则
  • 金融风险
预期产量

公司名称、国际财务报告准则、财务风险

XYZ公司,4,5

我下面的代码非常慢,并且分别计算每个关键字。我需要更简单有效的东西

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文件。好的,上面的代码现在可以使用导入的词典,并使用其关键字索引的相应实例进行更新。