Skip to content

Commit

Permalink
Merge pull request #46 from usagi/issue-45
Browse files Browse the repository at this point in the history
fix #45 《Modify》の辞書ファイルを既存の.txtに加えて.csvにも対応し、空白文字を含むパターンへの対応性を向上します
  • Loading branch information
usagi authored Dec 9, 2023
2 parents e0cfafb + 7933841 commit f2cd72a
Show file tree
Hide file tree
Showing 7 changed files with 126 additions and 33 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
*.lnk

# Generated by Cargo
# will have compiled files and executables
debug/
Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ runas = "1.1.0"
csv-async = { version = "1.2.6", features = ["tokio"] }
futures = "0.3.28"
twitch-irc = "5.0.1"
csv = "1.3.0"

# Windows Only
[target.'cfg(windows)'.dependencies]
Expand Down
9 changes: 1 addition & 8 deletions dictionary.arknights.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,8 @@
おうてつのきょうこく 黄鉄の峡谷 地名
おうほうろ 応峰路 名詞 将進酒
おおごと 瑟 名詞
おとがい 顎 名詞 将進酒
おりじにうむ 源石 名詞
おりぱしー 鉱石病 名詞
かい 晦 名詞 画中人の黒いの
かいごう 灰毫 人名
かいごうきし 灰毫騎士 人名
かいふくたて 回復盾 名詞
Expand Down Expand Up @@ -68,7 +66,6 @@
さんざんじゅうしちほう 三山十七峰 名詞 将進酒
さんざんじゅうはちほう 三山十八峰 名詞 将進酒
しうんほう 梓雲峰 地名 将進酒
しぇん 慎 人名 将進酒
しぇんろう 慎楼 人名 将進酒
しごうきん 熾合金 名詞
しざい 試剤 名詞
Expand Down Expand Up @@ -100,7 +97,6 @@
すいばく 睡爆 名詞
すいぼつちょうくつ 水没潮窟 名詞
すうしゅうほう 数舟峰 名詞 将進酒
ずお 左 人名 将進酒
ずおらう 左楽 人名 将進酒
せいどう 錆銅 名詞
せいらいはく 青雷伯 名詞 将進酒
Expand All @@ -111,7 +107,6 @@
そうこう 崢嶸 名詞 将進酒
そうさんと 争山渡 名詞 将進酒
そうゆう 礎烏有 人名 将進酒
だいじょうふ 大丈夫 名詞 将進酒
たいほー 太合 人名 将進酒
だいりじしょうけい 大理寺少卿 名詞 将進酒
たくじん 濯塵 人名
Expand All @@ -127,12 +122,10 @@
でいでいほう 泥泥峰 地名 将進酒
てんがく 天岳 地名 将進酒
てんどう 天瞠 名詞
どぅ 杜 姓 将進酒
とうげん 糖源 名詞
どぅやおいぇ 杜遥夜 人名 将進酒
とうりんい 登臨意 名詞
にん 寧 人名 将進酒
にんつーーちう 寧辞秋 人名 将進酒
にんつーちう 寧辞秋 人名 将進酒
ばいでぃんしゃん 白定山 名詞 将進酒
ばんしょうついおくろく 万象追憶録 名詞
ひごえいし 庇護衛士 名詞
Expand Down
56 changes: 56 additions & 0 deletions dictionary.chat.txt
Original file line number Diff line number Diff line change
@@ -1 +1,57 @@
テーマソング:タワーフィアース 2606c
ウサギネットワーク USAGI.NETWORK
うさぎはかせちゃん UsagiNetwork
うさぎはかせちゃん usaginetwork
アリシンさん arisinn
まふゆさん Mafuyu1109
まふゆさん mafuyu1109
アイリネさん airine_e
オシギフさん index407
フェリスさん fellys_shenya
ルウリさん louli_vr
ねこやまわんこさん nekoyamawanko
しもつきさん kai_shimotsuki
ななしそらさん 七風天
ゆきまるさん ukima_l
わいずぼっと WizeBot
ビートセイバーリクエスト !bsr
リンク !link
ボム !bomb
パチパチ usagin2Clap
ナデナデ usagin2Pat
レイド usagin2Raid
ナイス usagin2Nice
サバール usagin2Saber
ワイワイ usagin2SaberYY
サバール drUsagiSaber
パチパチ drUsagiClap
さくら3うおー sakula3Uooooooo
まいまい16ふりふり maimai16Furifuri
ディノダンス DinoDance
ギブプリーズ GivePLZ
テイクエナジー TakeNRG
ハート <3
キュー Queue
キュー queue
クローズド closed
リクエステッド requested
アデッド added
ハイ Hi
フォルクス folks
サンク thank
エンジョイング enjoying
アプリシエート appreciate
カインド kind
パーティシペーション participation
エンカレッジ encourage
フレンドリー friendly
リスペクトフル respectful
アトモスフィア atomopshere
リフレイン refrain
エニー any
オフェンシブ offensive
デロゲトリー derogatory
コンフロンテイショナル confrontational
リマークス remarks
スポイラーズ spoilers
インストラクションズ instructions
5 changes: 5 additions & 0 deletions regex.chat.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
パチパチパチ,"[88]{3,}"
パチパチ,".*パチパチ.*"
,"([!?,.]+)"
,"[\da-f]{4,}\s/\s[\da-f]{4,}"
$1 (以下略),"^(.{32}).*"
2 changes: 2 additions & 0 deletions regex.pre-command.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@
/set init ^\s*システムコマンド\s*セット\s*(イニット|イニシャライズ).*
/set bs ^\s*システムコマンド\s*セット\s*(ビ|ピ)ート\s*セイバー.*
/set bsl ^\s*システムコマンド\s*セット\s*(ビ|ピ)ート\s*セイバー\s*ランチ.*
/set jantama ^\s*システムコマンド\s*セット\s*(じゃん|ジャン|雀|残|ちゃん)(たま|タマ|魂).*
/set arknights ^\s*システムコマンド\s*セット\s*(アークナイツ|あーくないつ).*
/set clear ^\s*システムコマンド\s*セット\s*クリア.*
/? ^\s*システムコマンド.*
84 changes: 59 additions & 25 deletions src/processor/modify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ impl Processor for Modify {

let mut content = channel_data[index].content.clone();

// 正規表現による変換
for (replacer, from_regex) in &self.regexes {
content = from_regex.replace_all(&content, replacer).to_string();
}

// 辞書による変換
for (to, from) in &self.dictionary {
content = content.replace(from, to);
}

// alkana 変換
if let Some(true) = conf.alkana {
// 先に . , : ; などの ASCII 記号文字の前後に空白文字を挿入
Expand All @@ -62,16 +72,6 @@ impl Processor for Modify {
content = content.replace(" ", "");
}

// 辞書による変換
for (to, from) in &self.dictionary {
content = content.replace(from, to);
}

// 正規表現による変換
for (replacer, from_regex) in &self.regexes {
content = from_regex.replace_all(&content, replacer).to_string();
}

if self.channel_from == self.channel_to {
// self.modify が true の場合は、変換後の文字列を元 &mut ChannelDatum の文字列に上書き
log::debug!("変換後の文字列を元の文字列に上書きします。");
Expand Down Expand Up @@ -168,22 +168,56 @@ impl Processor for Modify {
} else {
std::env::current_dir()?.join(file)
};
let file = file.to_str().unwrap();
let file = std::fs::File::open(file)?;
let file = std::io::BufReader::new(file);
for line in file.lines() {
let line = line?;
let line = line.trim();
if line.is_empty() {
continue;

if file
.extension()
.unwrap_or_default()
.to_str()
.unwrap_or_default()
.to_lowercase()
.eq("csv")
{
// csv として処理 -> regexes
let file = file.to_str().unwrap();
// csv をロード
let mut rdr = csv::Reader::from_path(file)?;
for result in rdr.records() {
if let Ok(record) = result {
let (to_replacer, from_matcher) = match record.len() {
0 => continue,
// 特殊対応: 1列の場合はその列を from_matcher 、置換先は空文字列として処理する
1 => ("".to_string(), record.get(0).unwrap_or("").to_string()),
// 2列の場合はそのまま to_replacer と from_matcher として処理する
_ => (record.get(0).unwrap_or("").to_string(), record.get(1).unwrap_or("").to_string()),
};
if let Ok(from_matcher) = regex::Regex::new(&from_matcher) {
log::debug!("{} -> {}", from_matcher, to_replacer);
p.regexes.push((to_replacer, from_matcher));
} else {
log::warn!("正規表現の読み込みに失敗しました: {}", from_matcher);
}
}
}
} else {
// txt として処理 -> word_regexes
let file = file.to_str().unwrap();
let file = std::fs::File::open(file)?;
let file = std::io::BufReader::new(file);
for line in file.lines() {
let line = line?;
let line = line.trim();
if line.is_empty() {
continue;
}
// lineを最後の空白文字で分割
let mut line = line.rsplitn(2, ' ');
log::debug!("{:?}", line);
let from_matcher = line.next().unwrap().to_string();
let from_matcher = regex::Regex::new(&from_matcher)?;
let to_replacer = line.next().unwrap_or(" ").to_string();
log::debug!("{} -> {}", from_matcher, to_replacer);
p.regexes.push((to_replacer, from_matcher));
}
// lineを最後の空白文字で分割
let mut line = line.rsplitn(2, ' ');
let from_matcher = line.next().unwrap().to_string();
let from_matcher = regex::Regex::new(&from_matcher)?;
let to_replacer = line.next().unwrap().to_string();
log::warn!("{} -> {}", from_matcher, to_replacer);
p.regexes.push((to_replacer, from_matcher));
}
}

Expand Down

0 comments on commit f2cd72a

Please sign in to comment.