10 个版本
0.1.9 | 2023 年 11 月 17 日 |
---|---|
0.1.8 | 2023 年 11 月 16 日 |
#38 在 #pest-parser
51 每月下载
11KB
98 行
Telegram CSV 解析器
这是一个 Rust 程序,用于解析包含从 Telegram 收集的数据的 CSV 文件。主要目标是提取用户发送的消息。
技术描述
解析器使用基于 Pest 解析生成器的 telegram_csv_parser
crate。它遵循在 csv.pest
文件中定义的一组语法规则。期望 CSV 文件具有特定的结构,其中消息根据行中是否存在 "PeerUser(user_id=" 来识别。
解析过程
- 程序将 CSV 文件 (
example_collected_data_from_telegram.csv
) 读取到内存中。 CSVParser
根据指定的语法规则解析内容。- 对于每一行,它检查该行是否包含 "PeerUser(user_id=",指示用户的消息。
- 如果找到消息,程序将计算消息中的消息数和单词数。
解析逻辑
解析 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
或者使用以下链接:链接。
示例
运行以下命令
或
或
结果
依赖
~4MB
~68K SLoC