【问题标题】:How to tokenize all the files from all the subfolders如何标记所有子文件夹中的所有文件
【发布时间】:2019-09-04 13:14:44
【问题描述】:

我有一个包含 50 个子文件夹的数据集,每个子​​文件夹都有 20-30 个没有扩展名的文件。我想要做的是标记每个子文件夹的文件中的文本,并将其写入带有子文件夹名称的文件。例如; 假设 subfolder1 有 25 个文件,我想将这 25 个文件一起标记,并将其写入名为“subfolder1”的文件。我想对主文件夹中的所有子文件夹都这样做。

我已经尝试了这个code 的一些片段,但它给出了 PermissionError,因为它无法读取文件夹。

    mainfolder="path\\to\\mainfolder"

    def ls(path):
        return [os.path.join(path, item) for item in os.listdir(path)]


    def load_file_sents(path):
        return [sent.lower()
                for sent in tokenize.sent_tokenize(open(path).read())]


    def load_collection_sents(path):
        sents = []
        for f in ls(path):
            sents.extend(load_file_sents(f))
        return sents


    def get_sentences(path):
        """ loads sentences from the given path (collection or file) """
        sents = []
        try:
            # treat as a single file
            open(path).read()
            sents = load_file_sents(path)
        except IOError:
            # it's a directory!
            sents = load_collection_sents(path)
        return sents


    def get_toks(path):
        return [tokenize.word_tokenize(sent) for sent in get_sentences(path)]

    get_toks(mainfolder)

这是它给出的错误:

PermissionError                           Traceback (most recent call last)
<ipython-input-52-a6f316499b2c> in get_sentences(path)
     37         # treat as a single file
---> 38         open(path).read()
     39         sents = load_file_sents(path)

PermissionError: [Errno 13] Permission denied:

我尝试将前两个函数合并为一个,并确保它会读取文件,但这次它只返回第一个子文件夹的第一个文件的令牌。如果您知道如何解决此问题或有更好的方法,我们将不胜感激!谢谢。

【问题讨论】:

  • tokenizing 文件中的文本是什么意思?
  • 喜欢将文档拆分成单词和句子。 ['like', 'splitting', 'the', 'documents', 'into', 'words', 'and', 'sentences'] @Sukumar Rdjf
  • 您是否尝试过所有子文件夹并发出 cat * 命令,捕获输出,根据 空格 将其拆分,将 list 转换为 @987654327 @.and 再次到 list 并将该列表写入以子文件夹名称命名的文件。让我知道这是否有效。
  • 我写了一个脚本来连接子文件夹中的文件,它现在解决了我的问题。但是,如果有人能解释如何处理所有子文件夹中的所有文件,并且将每个子文件夹视为一个文件,那就太好了。

标签: python nlp dataset tokenize


【解决方案1】:

尝试使用 currentsub-folders 获取所有文件的内容下面的命令

find . -type f -exec cat {} +

使用Subprocess.check_output 将输出重定向到一个变量并对该变量执行标记化。

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2020-07-02
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多