计数标签

2024-07-01 07:46:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个名为HASHcount(名称列表)的函数,它接收两个参数,名称一个是要分析的文件的名称,文本文件的结构如下:

Date|||Time|||Username|||Follower|||Text 

所以,基本上我的输入是一个tweets列表,有几行结构如上面所示。list参数是我想在该文本文件中计数的哈希标记列表。我希望我的函数可以检查列表中每个单词在tweets列表中出现的次数,并将每个单词计数的字典作为输出,即使该单词缺失。在

例如,使用指令HASHcount(December[Peace,Love])程序应该给出一个字典作为输出,该字典通过检查单词Peace和Love在名为December的每个tweet的文本字段中被用作hashtag的次数。在

此外,在字典中,单词必须没有标签simbol。在

我一直在做这个函数,我在这一点上,但我有一些关于字典的问题:

^{pr2}$

Tags: 函数名称列表参数字典单词次数结构
3条回答

我喜欢使用集合模块。这对我有用。在

from collections import defaultdict

    def HASHcount(file_to_open, lst):

        with open(file_to_open) as my_file:
            my_dict= defaultdict(int)


            for line in my_file:

                line = line.split('|||')
                txt = line[4].strip(" ")
                if txt in lst:
                    my_dict[txt] += 1

        return my_dict

你的代码有几个问题,其中一些已经被指出,而另一些问题(例如在tweet文本中识别标签)没有。下面是一个不包含后一个问题的细节的部分解决方案:

def HASHcount(name, words):
    dic = dict.fromkeys(words, 0)
    with open(name,"r") as f:
        for line in f:
            for w in words:
                if '#' + w in line:
                    dic[w] += 1
    return dic

这提供了几个简化,关键在于tweet中的hashtags确实以#开头(你不希望在dic中出现),因此不值得分析每一行,因为{}不能出现在文本中。在

然而在其他答案中,它仍然有一个问题的一小部分(除了刚刚注释掉这个最微妙的部分的那个!-)它可以通过部分匹配得到误报。当检查就像word in linetext时,问题将是巨大的,例如如果一个单词是cat,那么即使它出现在非常普通的文本中(它本身或者作为另一个单词的一部分,例如vindicative),它也会被算作标签。使用'#' +方法会更好一些,但是前缀匹配仍然会导致误报,例如#catalog将错误地计算为cat的命中。在

正如一些人建议的那样,正则表达式可以帮助实现这一点。但是,这里有一个for w in words循环体的替代方案。。。在

^{pr2}$

剩下的唯一问题是确定哪些字符可以作为hashtags的一部分,也就是说,集合chars_acceptable_in_hashes我没有记住Twitter的规范,所以我不知道它是什么,但你肯定可以找到。请注意,这也适用于行尾,因为line没有被剥离,所以它以\n结尾。它不在可接受的集合中(所以在行尾的hashtag也将“正确终止”)。在

主要的问题是,您要迭代文件中每个单词的行,而不是相反。因此,第一个单词将占用文件的所有行,并且每个后续单词将有0个匹配项。在

相反,你应该这样做:

def hash_count(name, words):
    dic = {word:0 for word in words}
    with open(name) as f:
        for line in f:
            line_text = line.split('|||')[4]
            for word in words:
                # Check if word appears as a hashtag in line_text
                # If so, increment the count for word
    return dic

相关问题 更多 >

    热门问题