0

我是编程新手,但我有 python 3 的基础知识并安装了 treetagger,并且通过我的命令 shell 我可以 POS 标记文件。

但是,我试图自动打开并运行 Treetagger 的文件夹中有 427 个文件,但我不知道如何实现这一点。我当前的代码是这样的:

import os
import sys
import subprocess
import re

rootdir = r"/Spanish_(ACTIV-es)_corpus/plain"

我想自动检查一个包含超过 427 个文件的文件夹,并将适当的文件标记为 POS

我认为这需要下面的一些组合以及包括 SUBPROCESS 命令的代码来让 TreeTagger 完成它的工作,我绝对不明白如何使用,但试图从堆栈溢出的另一个问题的反馈中实现。

示例代码

如何让 movie_pos 成为 treetagger 在遍历文件夹中的文件时将 POS 标记的文件?

然后:输出??我是否需要已经为输出创建了 427 个单独的文件,或者有没有办法自动使输出成为输入的修改后的标题,这样输出就不会混淆。(在文件的标题中,是当前存储元数据的位置)。

4

1 回答 1

0

使用 Python 是对文件进行标记的严格要求吗?如果没有,您只需使用 shell 即可轻松实现它,方法是遍历文件夹的文件,在每个文件上运行 TreeTagger,然后保存(如您正确假设的那样)到具有不同名称的文件。

例如,这是一个包含 3 个文件的目录:

$ ls mydir/
1.txt 2.txt 3.txt

里面有一些西班牙语文本。

$ cat mydir/1.txt
Esto es una prueba.

然后你可以使用

  1. find列出所有你关心的文件的shell命令(例如所有以“.txt”结尾的文件

    find mydir/ -name "*.txt"

  2. for循环遍历结果的命令find(使用反引号``),并在每个结果上运行 TreeTagger

    $ for i in `find ....`; do tag_command_using_$i; done

$i(保存每个文件路径的变量)

  1. shell 的重定向功能 ( >) 将 TreeTagger 的输出(您通常会在屏幕上看到)重定向​​到您可以使用原始文件的名称适当命名的文件

    tag_command $i > $i.tagged

在一行中,它看起来像这样:

$ for i in `find mydir/ -name "*.txt"`; do cat $i | cmd/tree-tagger-spanish > $i.tagged; done

完成后,您将在同一文件夹中拥有新创建的文件:

$ ls mydir/
1.txt        1.txt.tagged 2.txt        2.txt.tagged 3.txt        3.txt.tagged

$ cat mydir/1.txt.tagged
Esto es ADV esto~es
una ART un
prueba  NC  prueba
.   FS  .
于 2016-09-23T13:01:16.030 回答