python - 计算文档数量

标签 python path count operating-system

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

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

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字

所以自然科学学院是Corpus的子语料库,物理研究所是自然科学学院的子语料库。希望这能让大家清楚。

最佳答案

当给定关键字参数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}

关于python - 计算文档数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28091099/

相关文章:

python - 如何使用 scipy 设置而不是拟合样条插值的系数?

PHP:提供文件结构中没有 .php 文件的页面

python - 将代码从开发计算机移动到目标时管理 Python 路径

SQL SELECT 使用 CASE 语句,但有多个条件

r - 在组内计算值变化前后的数量,为每个独特的转变生成新变量

python - Pandas - 用空值替换行并删除符合两个条件的行

python - Django 运行时错误 : maximum recursion depth exceeded

python - 从另一列 pandas df 分配值的有效方法

opengl - 如何将二维粗线渲染为多边形?

python - 在 Python 中聚合简单字典的最佳方法