1 个不稳定版本
0.1.0 | 2022年10月15日 |
---|
#1634 在 文本处理
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