10 个版本

0.1.9 2023 年 11 月 17 日
0.1.8 2023 年 11 月 16 日

#38#pest-parser

Download history 5/week @ 2024-03-10 1/week @ 2024-03-17 3/week @ 2024-03-31 206/week @ 2024-04-07

51 每月下载

MIT 许可证

11KB
98

Telegram CSV 解析器

这是一个 Rust 程序,用于解析包含从 Telegram 收集的数据的 CSV 文件。主要目标是提取用户发送的消息。

crates.io

技术描述

解析器使用基于 Pest 解析生成器的 telegram_csv_parser crate。它遵循在 csv.pest 文件中定义的一组语法规则。期望 CSV 文件具有特定的结构,其中消息根据行中是否存在 "PeerUser(user_id=" 来识别。

解析过程

  1. 程序将 CSV 文件 (example_collected_data_from_telegram.csv) 读取到内存中。
  2. CSVParser 根据指定的语法规则解析内容。
  3. 对于每一行,它检查该行是否包含 "PeerUser(user_id=",指示用户的消息。
  4. 如果找到消息,程序将计算消息中的消息数和单词数。

解析逻辑

解析 CSV 文件字段的语法规则

quoted_string= { "\"" ~ (!"\"" ~ ANY)* ~ "\"" }

此规则定义了双引号内的引用字符串。' " ' 匹配开双引号。' (!""" ~ ANY)* ' 匹配任何不是双引号的字符序列,捕获双引号之间的所有内容。' " ' 匹配关闭双引号。

value= {quoted_string| (!"," ~ (!"\n" ~ ANY))* }

此规则定义了一个值,可以是引用字符串或任何不是逗号的字符序列。引用字符串是另一种选择。' (!"," ~ (!"\n" ~ ANY))* ' 匹配任何不是逗号的字符序列,捕获直到逗号或行末的所有内容。

row= {value~ ("," ~value)* }

此规则定义了一行,由一个或多个以逗号分隔的值组成。Value 匹配第一个值。' ( "," ~ value)* ' 匹配零个或多个逗号后跟另一个值的出现。

file= { SOI ~ (row~ ("\r\n" | "\n"))* ~ EOI }

此规则定义了一个文件,它以输入的开始 (SOI) 开始。`(row ~ ("\r\n" | "\n"))*` 匹配零个或多个行后跟 Windows 风格的行结束符 (\r\n) 或 Unix 风格的行结束符 (\n)。它以输入的结束 (EOI) 结束。

用法

确保您已安装 Rust 和 Cargo。然后运行以下命令

cargorun ---f name_of_the_file_to_parse.csv

cargorun ----file name_of_the_file_to_parse.csv

默认情况下,它将创建一个输出文件来存储结果。

但是,您可以指定要保存结果的输出文件的路径

cargorun ---f examples\eexample_collected_data_from_telegram.csv -o my_file_to_save.txt

cargorun ---f examples\eexample_collected_data_from_telegram.csv --output my_file_to_save.txt

当需要帮助时,使用

cargorun ---help

文档

如果需要文档,请按照以下命令操作

cargodoc --open

或者使用以下链接:链接

示例

my_img

运行以下命令

my_img

my_img

my_img

结果

my_img

my_img

依赖

~4MB
~68K SLoC