【问题标题】:Counting number of documents计算文件数量
【发布时间】:2015-01-22 14:24:53
【问题描述】:

我有一个语料库,我需要统计整个语料库中的文档和标记的数量,以及它的子部分。

到目前为止我一直在开发的代码如下所示:

def gather_data(path):
    words = 0
    articles = 0
    for root, dirs, files in os.walk(path):
        for f in files:
            if not f.endswith('_metadata.txt') and f.endswith('.txt'):
                articles += 1
                p = os.path.join(root, f)
                with open(p) as duo_file:
                        for line in duo_file.readlines():
                            words += len(line.split())
    write_to_data(words, articles, current_path)

我知道,计数非常粗略,需要进一步发展。但是,我似乎无法弄清楚如何计算总数(整个语料库),并计算语料库的每个辅助部分。所以结构是,整个语料库 -(第 1 部分,第 2 部分,第 3 部分) - 然后每个部分也有子部分,所以我们有第 1 部分 -(第 1 部分,第 2 部分,第 3 部分)。

所以本质上它是一个列表列表:

[Corpus, [Part 1[part 1, part 2]], [Part 3 [...]]...]]

所以我希望计数是(来自上面的示例)

Corpus -> counts
Part 1 -> counts
Part 1.part 1 -> counts
Part 1.part 2 -> counts

有人问零件是什么。它们是文件夹。因此,主文件夹称为语料库,该文件夹由几个文件夹组成,每个文件夹都是语料库的子部分,这些文件夹由更多文件夹或文件组成。它是一个文件夹目录 - 文件夹 - (文件夹或文件)

所以基本上我想计算每个文件夹下的所有文件。所以我想要对根文件夹进行计数,这意味着对所有内容进行计数,然后对根目录下的每个文件夹进行计数,然后对这些文件夹进行计数(如果有更多文件夹)。

我希望它被打印出来:

语料库:x 篇文章,x 个词 自然科学学院:x 篇文章,x 个单词 物理研究所:x 篇,x 词

所以自然科学学院是语料库的一个子语料库,物理研究所是自然科学学院的一个子语料库。希望这能说明问题。

【问题讨论】:

  • 第 1、2 和 3 部分是什么?将文件分成几部分的标准是什么?

标签: python path count operating-system


【解决方案1】:

当给定关键字参数topdown=False 时,os.walk 将在生成目录之前生成目录的子目录。换句话说,它就像一个后序树搜索。我们可以使用它对语料库各部分的条目数进行递归计数。

假设我们的目录结构是这样的:

./corpus
├── part_1
│   ├── sub_1
│   │   ├── 1
│   │   ├── 2
│   │   └── 3
│   └── sub_2
│       ├── 1
│       └── 2
└── part_2
    └── part_1
        ├── 1
        ├── 2
        └── 3

我们可以通过自下而上的遍历并对子目录的大小求和来计算每个子目录中的条目数:

counts = {}
for dirpath, dirnames, fnames in os.walk("./corpus", topdown=False):
    counts[dirpath] = len(fnames)
    for d in dirnames:
        key = os.path.join(dirpath, d)
        counts[dirpath] += counts[key]

测试:

>>> counts
{'./corpus': 8,
 './corpus/part_1': 5,
 './corpus/part_1/sub_1': 3,
 './corpus/part_1/sub_2': 2,
 './corpus/part_2': 3,
 './corpus/part_2/part_1': 3}

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2020-10-07
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多