#word-count #count #word #translation #source-file #tmx #localization

filecount

一个现代化的高性能开源文件分析库,用于自动化本地化任务

1 个不稳定版本

0.1.0 2022年10月15日

#1634文本处理

Apache-2.0

29KB
451

🧛 文件计数

文件计数是一个现代化的高性能开源文件分析库,用于自动化本地化任务。它允许您将文件分析功能添加到您的项目中,同时保持很高的可定制性和可扩展性。散列算法将始终确保最佳分析性能。

计数单词是一个众所周知的问题 难以解决,因为它真的很难定义规则,以给出每种语言的“准确”单词计数。这意味着许多不同的文本编辑程序和 CAT 工具对相同文本给出不同的单词计数!文件计数的理念是“快速且足够准确”。因为对于快速文件分析的目的,通常足够接近准确计数。

如果您想看到文件计数的实际应用,请访问网站: Filecount.io

示例

use std::env;
use std::io::Read;
use std::process;
use filecount::analysis::analyze;
use filecount::extract::{extract, ExtractionRules};
use filecount::segmentation::{hashment_many};
use filecount::memory::HashedMemory;
use filecount::unicode::UnicodeRules;
use std::fs::{File};

fn main() {
    let args: Vec<String> = env::args().collect();

    if args.len() < 2 {
        println!("Not enough arguments passed. Please provide a path to a file or folder");
        process::exit(1);
    }

    let path = args[1].clone();

    let mut memfile = File::open("memory.tmx").unwrap();
    let mut memfile_buffer = Vec::new();
    memfile.read_to_end(&mut memfile_buffer).unwrap();  

    let memory = HashedMemory::from_tmx(&memfile_buffer).unwrap();

    let mut file = File::open(&path).unwrap();
    let mut buffer = Vec::new();
    file.read_to_end(&mut buffer).unwrap();  

    let texts = extract(buffer, &path, ExtractionRules::default()).unwrap();
    let hashments = hashment_many(texts, &UnicodeRules);
    let analysis = analyze(hashments, &memory);
    println!("{:?}", analysis);       
}

用法

文件计数使用3个基本原理,每个原理都由其相应的函数表示

  • 提取
  • 散列
  • 分析

提取函数从支持注入提取规则的文件中提取文本元素。包含常见文件类型的默认提取规则集。

散列函数将这些提取部分转换为散列段(因此称为散列),并提供注入的分段规则(默认支持 Unicode 标准附件 #29)的单词和字符计数。

分析函数根据(可选)翻译记忆分析这些散列,以获取总单词和字符计数、重复项和 TM 匹配。

文件计数故意将此功能分开,以实现对这些函数使用的最佳用户控制。

理论规格

通过在二叉树中存储散列格式(请参阅文档中的散列)的段,查找的复杂度为 O(log N),其中 N 是内存的大小。这样,整个文件分析可以在 O(N log N) 的时间内完成,其中 N 是文件中的段数。文件计数故意不计算模糊匹配(50% TM 匹配,80% TM 匹配等),因为这些匹配通常对文件处理器价值较小,这将确保高性能操作。

安装

通过在您的 Cargo.toml 中添加以下内容,在您的项目中使用此包

[dependencies]
filecount = "0.1.0"

支持的文件格式

  • docx
  • pptx
  • xlsx
  • json
  • xml
  • txt
  • xliff

计划功能

  • 支持更多默认文件类型(包括html、doc、pdf、po等)(所有pull request都欢迎)
  • 上下文匹配(尽管不同的CAT工具对“上下文”的定义不同)
  • 为音频视频文件的分析输出添加秒和分钟(适用于与字幕相关的任务)
  • .srx基于的默认分割支持
  • .xliff基于的.tmx和哈希内存管理(使用.xliff文件填充.tmx)
  • 基于分割规则将任何文件转换为.xliff
  • 将翻译过的.xliff文件重新转换为原始文件类型

依赖项

~2.4–3.5MB
~66K SLoC