Skip to content

Commit

Permalink
update READMEs
Browse files Browse the repository at this point in the history
  • Loading branch information
guuzaa committed Sep 11, 2024
1 parent 6303226 commit d67f7e5
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 29 deletions.
24 changes: 19 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ English | [简体中文](docs/README-zh-CN.md) | [繁體中文](docs/README-zh-T

## 📝 Description

This Rust implementation of the classic `tc` (token count) command-line tool allows you to count lines, words, and characters in text files or from standard input. It's fast, reliable, and supports Unicode! 🌍✨
This Rust implementation of the classic `wc` (word count) command-line tool allows you to count lines, words, characters, and even tokens in text files or from standard input. It's fast, reliable, and supports Unicode! 🌍✨

## 🎯 Features

- Count lines 📏
- Count words 🔤
- Count characters (including multi-byte Unicode characters) 🔡
- Count tokens (not ready yet) 🔤
- Count tokens using various tokenizer models 🔢
- Process multiple files 📚
- Read from standard input 🖥️
- Supports various languages (English, Korean, Japanese, and more!) 🌐
Expand Down Expand Up @@ -42,8 +42,17 @@ This Rust implementation of the classic `tc` (token count) command-line tool all
- `-l, --lines`: Show line count 📏
- `-w, --words`: Show word count 🔤
- `-c, --chars`: Show character count 🔡
- `-t, --tokens`: Show token count 🔢
- `--model <MODEL>`: Choose tokenizer model (default: gpt3)

If no options are specified, all counts (lines, words, and characters) will be shown.
Available models:
- `gpt3`: r50k_base
- `edit`: p50k_edit
- `code`: p50k_base
- `chatgpt`: cl100k_base
- `gpt4o`: o200k_base

If no options are specified, all counts (lines, words, characters, and tokens) will be shown.

### Examples:

Expand All @@ -59,10 +68,15 @@ If no options are specified, all counts (lines, words, and characters) will be s

3. Count lines and characters from standard input:
```
echo "Hello, World!" | ./tc -l -c
echo "Hello, World!" | ./tc -lc
```

4. Count tokens using the ChatGPT tokenizer:
```
./tc -t --model chatgpt example.txt
```

4. Count everything in files with different languages:
5. Count everything in files with different languages:
```
./tc english.txt korean.txt japanese.txt
```
Expand Down
18 changes: 16 additions & 2 deletions docs/README-ja-JP.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,17 @@ Rustで書かれたシンプルで効率的なトークンカウントプログ
- `-l, --lines`:行数を表示 📏
- `-w, --words`:単語数を表示 🔤
- `-c, --chars`:文字数を表示 🔡
- `-t, --tokens`:トークン数を表示 🔢
- `--model <MODEL>`:トークナイザーモデルを選択(デフォルト:gpt3)

オプションが指定されていない場合、すべてのカウント(行数、単語数、文字数)が表示されます。
利用可能なモデル:
- `gpt3`: r50k_base
- `edit`: p50k_edit
- `code`: p50k_base
- `chatgpt`: cl100k_base
- `gpt4o`: o200k_base

オプションが指定されていない場合、すべてのカウント(行数、単語数、文字数、トークン数)が表示されます。

### 例:

Expand All @@ -62,7 +71,12 @@ Rustで書かれたシンプルで効率的なトークンカウントプログ
echo "こんにちは、世界!" | ./tc -l -c
```

4. 異なる言語のファイルですべてをカウント:
4. ChatGPTトークナイザーを使用してトークン数をカウント:
```
./tc -t --model chatgpt example.txt
```

5. 異なる言語のファイルですべてをカウント:
```
./tc english.txt korean.txt japanese.txt
```
Expand Down
23 changes: 19 additions & 4 deletions docs/README-ko-KR.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@
Rust로 작성된 간단하고 효율적인 토큰 카운트 프로그램입니다! 🚀

[English](../README.md) | [简体中文](README-zh-CN.md) | [繁體中文](README-zh-TW.md) | [日本語](README-ja-JP.md) | 한국어 | [Deutsch](README-de-DE.md)

## 📝 설명

이 Rust로 구현된 고전적인 `tc` (토큰 카운트) 명령줄 도구는 텍스트 파일이나 표준 입력에서 줄 수, 단어 수, 문자 수를 세는 기능을 제공합니다. 빠르고 안정적이며 유니코드를 지원합니다! 🌍✨
이 Rust로 구현된 고전적인 `wc` (단어 수 세기) 명령줄 도구는 텍스트 파일이나 표준 입력에서 줄 수, 단어 수, 문자 수, 심지어 토큰 수까지 세는 기능을 제공합니다. 빠르고 안정적이며 유니코드를 지원합니다! 🌍✨

## 🎯 기능

- 줄 수 세기 📏
- 단어 수 세기 🔤
- 문자 수 세기 (다중 바이트 유니코드 문자 포함) 🔡
- 토큰 수 세기 (아직 준비되지 않음) 🔤
- 다양한 토크나이저 모델을 사용한 토큰 수 세기 🔢
- 여러 파일 처리 📚
- 표준 입력에서 읽기 🖥️
- 다양한 언어 지원 (영어, 한국어, 일본어 등!) 🌐
Expand Down Expand Up @@ -41,8 +42,17 @@ Rust로 작성된 간단하고 효율적인 토큰 카운트 프로그램입니
- `-l, --lines`: 줄 수 표시 📏
- `-w, --words`: 단어 수 표시 🔤
- `-c, --chars`: 문자 수 표시 🔡
- `-t, --tokens`: 토큰 수 표시 🔢
- `--model <MODEL>`: 토크나이저 모델 선택 (기본값: gpt3)

사용 가능한 모델:
- `gpt3`: r50k_base
- `edit`: p50k_edit
- `code`: p50k_base
- `chatgpt`: cl100k_base
- `gpt4o`: o200k_base

옵션을 지정하지 않으면 모든 수 (줄 수, 단어 수, 문자 수)가 표시됩니다.
옵션을 지정하지 않으면 모든 수 (줄 수, 단어 수, 문자 수, 토큰 수)가 표시됩니다.

### 예시:

Expand All @@ -61,7 +71,12 @@ Rust로 작성된 간단하고 효율적인 토큰 카운트 프로그램입니
echo "안녕하세요, 세상!" | ./tc -l -c
```

4. 다양한 언어로 된 파일의 모든 수 세기:
4. ChatGPT 토크나이저를 사용하여 토큰 수 세기:
```
./tc -t --model chatgpt example.txt
```

5. 다양한 언어로 된 파일의 모든 수 세기:
```
./tc english.txt korean.txt japanese.txt
```
Expand Down
24 changes: 19 additions & 5 deletions docs/README-zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
[English](../README.md) | 简体中文 | [繁體中文](README-zh-TW.md) | [日本語](README-ja-JP.md) | [한국어](README-ko-KR.md) | [Deutsch](README-de-DE.md)
## 📝 描述

这个 Rust 实现的经典 `tc`(标记计数)命令行工具可以统计文本文件或标准输入中的行数、单词数和字符数。它快速、可靠,并且支持 Unicode!🌍✨
这个 Rust 实现的经典 `wc`(字数统计)命令行工具可以统计文本文件或标准输入中的行数、单词数、字符数,甚至是标记数。它快速、可靠,并且支持 Unicode!🌍✨

## 🎯 特性

- 统计行数 📏
- 统计单词数 🔤
- 统计字符数(包括多字节 Unicode 字符)🔡
- 统计标记数(尚未准备就绪)🔤
- 使用各种分词器模型统计标记数 🔢
- 处理多个文件 📚
- 从标准输入读取 🖥️
- 支持多种语言(英语、韩语、日语等)🌐
Expand Down Expand Up @@ -41,8 +41,17 @@
- `-l, --lines`:显示行数 📏
- `-w, --words`:显示单词数 🔤
- `-c, --chars`:显示字符数 🔡
- `-t, --tokens`:显示标记数 🔢
- `--model <MODEL>`:选择分词器模型(默认:gpt3)

如果未指定选项,将显示所有计数(行数、单词数和字符数)。
可用模型:
- `gpt3`: r50k_base
- `edit`: p50k_edit
- `code`: p50k_base
- `chatgpt`: cl100k_base
- `gpt4o`: o200k_base

如果未指定选项,将显示所有计数(行数、单词数、字符数和标记数)。

### 示例:

Expand All @@ -58,10 +67,15 @@

3. 从标准输入统计行数和字符数:
```
echo "你好,世界!" | ./tc -l -c
echo "你好,世界!" | ./tc -lc
```

4. 使用 ChatGPT 分词器统计标记数:
```
./tc -t --model chatgpt example.txt
```

4. 统计不同语言文件中的所有内容:
5. 统计不同语言文件中的所有内容:
```
./tc english.txt korean.txt japanese.txt
```
Expand Down
24 changes: 19 additions & 5 deletions docs/README-zh-TW.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@

## 📝 描述

這個 Rust 實現的經典 `tc`(標記計數)命令列工具可以統計文字檔案或標準輸入中的行數、單字數和字元數。它快速、可靠,並且支援 Unicode!🌍✨
這個 Rust 實現的經典 `wc`(字數統計)命令列工具可以統計文字檔案或標準輸入中的行數、單字數、字元數,甚至是標記數。它快速、可靠,並且支援 Unicode!🌍✨

## 🎯 特性

- 統計行數 📏
- 統計單字數 🔤
- 統計字元數(包括多位元組 Unicode 字元)🔡
- 統計標記數(尚未準備就緒)🔤
- 使用各種分詞器模型統計標記數 🔢
- 處理多個檔案 📚
- 從標準輸入讀取 🖥️
- 支援多種語言(英語、韓語、日語等)🌐
Expand Down Expand Up @@ -42,8 +42,17 @@
- `-l, --lines`:顯示行數 📏
- `-w, --words`:顯示單字數 🔤
- `-c, --chars`:顯示字元數 🔡
- `-t, --tokens`:顯示標記數 🔢
- `--model <MODEL>`:選擇分詞器模型(預設:gpt3)

如果未指定選項,將顯示所有計數(行數、單字數和字元數)。
可用模型:
- `gpt3`: r50k_base
- `edit`: p50k_edit
- `code`: p50k_base
- `chatgpt`: cl100k_base
- `gpt4o`: o200k_base

如果未指定選項,將顯示所有計數(行數、單字數、字元數和標記數)。

### 範例:

Expand All @@ -59,10 +68,15 @@

3. 從標準輸入統計行數和字元數:
```
echo "你好,世界!" | ./tc -l -c
echo "你好,世界!" | ./tc -lc
```

4. 使用 ChatGPT 分詞器統計標記數:
```
./tc -t --model chatgpt example.txt
```

4. 統計不同語言檔案中的所有內容:
5. 統計不同語言檔案中的所有內容:
```
./tc english.txt korean.txt japanese.txt
```
Expand Down
17 changes: 9 additions & 8 deletions src/input_processor.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::io::{self, Read, Write};
use tiktoken_rs::{cl100k_base, p50k_base, p50k_edit, r50k_base, o200k_base};
use crate::cmd::TokenizerModel;
use std::io::{self, Read, Write};
use tiktoken_rs::{cl100k_base, o200k_base, p50k_base, p50k_edit, r50k_base};

pub struct CountOptions {
pub show_lines: bool,
Expand Down Expand Up @@ -52,13 +52,14 @@ where
output.push_str(&format!("{:8}", char_count));
}
if options.show_tokens {
let token_count = match options.tokenizer_model {
TokenizerModel::GPT3 => r50k_base().unwrap().encode_ordinary(&buffer_string).len(),
TokenizerModel::Edit => p50k_edit().unwrap().encode_ordinary(&buffer_string).len(),
TokenizerModel::Code => p50k_base().unwrap().encode_ordinary(&buffer_string).len(),
TokenizerModel::ChatGPT => cl100k_base().unwrap().encode_ordinary(&buffer_string).len(),
TokenizerModel::GPT4O => o200k_base().unwrap().encode_ordinary(&buffer_string).len(),
let tokenizer = match options.tokenizer_model {
TokenizerModel::GPT3 => r50k_base().unwrap(),
TokenizerModel::Edit => p50k_edit().unwrap(),
TokenizerModel::Code => p50k_base().unwrap(),
TokenizerModel::ChatGPT => cl100k_base().unwrap(),
TokenizerModel::GPT4O => o200k_base().unwrap(),
};
let token_count = tokenizer.encode_ordinary(&buffer_string).len();
output.push_str(&format!("{:8}", token_count));
}

Expand Down

0 comments on commit d67f7e5

Please sign in to comment.