- [x] 日语OCR识别错误,[[日语词形相似度算法]] ファ会变成フア,つい会变成っい,アルコール变成アルコ-ル
> あんた 何やってんのよ 你在干什么啊
> あなた
- [ ] 从相似度的角度来说 あなた 和这个很相似进而来说 な和 ん 应该赋予类似的权重
> はっ酵乳
> 発酵乳
> 新札幌乳業 さわやかのむヨーグルト
> 2024-03-27
- [ ] はっ酵乳,这个东西非常难办,不是表外汉字,单纯是书写者的恶趣味,但问题在于这个东西按照自己原来的想法也不太可能解决,只能看有没有关于未收录词预测方面的[[论文]]了。我记得[Mecab](Mecab.md)是有关于这方面的优化,可以读一读是如何做的。
注意到了一个单词ペスト ペースト 这样的单词可能会对[[日语词形相似度算法]]有一定的干扰,本身意思没有任何关系,但自己的算法不会区分二者,但退一步说,自己的目标也不精确预测,也不是纠正不正确的拼写,而是提供可能是辞书形的单词。
- [ ] ほろ酔い ほろ苦い ほの暗い 笑了,[[SudachiDict]] 是把这个作为[[辞书形]]了么
- [ ] べスプラ ベストプラクティス 【best practice】[[外来语]] [[日语词形相似度算法]] 这个其实就非常麻烦了,如果是两个外来词都可以这么干的话
- [ ] ロータリー这个东西好玩在有2个长音符号。
運だめし这个虽然收录了,但问题在于汉字数量和假名的数量居然达到了1:3 的比例做起来可能非常麻烦
> 一駅でアニマる
> JR 山手線
> [[2024-12-16]]
最好玩的是辞书形就是【アニマル】,即动物的意思。[[日语词形相似度算法]]
[[「コンピュータ」「コンピューター」?カタカナの長音表記の揺らぎ問題の正解を出してみました。 - ふーたらのページ]]
突然想到:计算相似度时,如果是假名的读音可以考虑忽略浊化
重点在自己之前接触的编辑距离算法只适合比较长的文章,日语的单词太短了
- [ ] 统计日语单词的长度,顺便和英语做个比较
- [ ] 自己的算法似乎没有考虑到ペスト ペースト 这样只是单纯长的一样的单词影响,而且这种的区别就是自己之前注意到的长音符号的区别
- [ ] `ルーティング【routing】`和`ルーチン`可以用做
- [ ] 整理下面论文提到的问题
[[『外来語の語形のゆれ(2)』]]
[JTF日本語標準スタイルガイド(翻訳用)](JTF日本語標準スタイルガイド(翻訳用).md),关于日语翻译的评判标准,其中也提到了[日语词形相似度算法](日语词形相似度算法.md)关注的问题,可以以这个文件作为标准选取标准型
## 常用汉字的书写问题
> 程心の時代の商業映画につきものだった==押しつけ==がましさはみじんもなく、物語は長江のようにゆったりと流れて
> 押し付け
付不是非常用汉字,但似乎习惯不写汉字,也许是假名就一笔吧233
> 下手でも 楽しく弾くことだけは==心がけ==よ!
> 心掛ける
[日语词形相似度算法](日语词形相似度算法.md)看来日本人是真的不喜欢写【掛】2333,注意这里的读法不是原来的标准读法
## 非常用汉字的书写问题
> 「残念なのは、こんな美人が==力ずく==の手段に頼ったことだよ」笑い声の波がさらに大きくなった。
> ちからずく・力尽く
[日语词形相似度算法](日语词形相似度算法.md),注意尽字有标记【力▽尽く】
> ラノベにソシャゲに VTuber に==ボコ殴り==な感じで 全然売れなくて
> ボコボコ
[非辞書](非辞書.md)的v4版本才能解决这样的问题吧,这不是单纯的[日语词形相似度算法](日语词形相似度算法.md)的问题,而是对一个词条的实际意义的拓展,除非在词的意思上进行聚类分析,否则只能构建特殊规则,不过话说话来,拟声拟态词的前2个假名拿出来用的这个用法可以类推的东西么……[MOJi](MOJi.md)的算法应该能解决这个问题
## 长音标记
> そう思ってるなら==てんちょー==もちゃんとデバッグやって
> てんちょう
嗯……这是不是字幕组的错误呢……但严格来说,[非辞書](非辞書.md)的前3代版本都是基于语言学构建规则进行解析的算法的话,[日语词形相似度算法](日语词形相似度算法.md)也应该要解决这个问题才是
[[放送用語委員会●外来語の発音・表記について.pdf]]
[[外来語における[ei]の表記のゆれ.pdf]]
[[『日本語の正しい表記と用語の辞典 第三版』]]
## 促音
> ==おっつかれさまー==
> おつかれさま・お疲れ様
看起来删除特殊的标记方式(促音和长音标记)应该放在最后进行,因为有可能标记符号就是对的东西
> ==たっくさん==
> たくさん
- [ ] 如果[日语词形相似度算法](日语词形相似度算法.md)是最后一步的话,那可以把っ直接删掉,因为之前进行过查询了
## 实现
### Python 实现
飛出す
飛び出す
飛びだす
とび出す
飛出す e9a39be587ba111000111000000110011001
飛び出す e9a39b111000111000000110110011e587ba111000111000000110011001
飛びだす e9a39b111000111000000110110011111000111000000110100000111000111000000110011001
とび出す 111000111000000110101000111000111000000110110011e587ba111000111000000110011001
他の単語 e4bb96111000111000000110101110e58d98e8aa9e
可以先在等长范围内查,如果没有的话,再去按照排序后的结果查找,还是没有找到的话,将原字符串取反计算出编号后,再查一次最相似的单词到底是谁,这种方式可以利用二分查找,也不用构建专门的数据集
```python
def convert_bytes(char:str)->str:
return char.encode('utf-8')
def convert_hex_bytes(utf8_bytes:str)->str:
return ''.join(f'{byte:02x}' for byte in utf8_bytes)
def convert_binary_bytes(utf8_bytes:str)->str:
return ''.join(f'{byte:08b}' for byte in utf8_bytes)
def is_japanese_kana(char):
# 获取字符的 Unicode 代码点
code_point = ord(char)
# 检查是否在平假名或片假名的范围内
if (0x3040 <= code_point <= 0x309F) or (0x30A0 <= code_point <= 0x30FF):
return True
return False
def conert_word(word):
word_bytes = ""
for char in word:
char_bytes = convert_bytes(char)
if is_japanese_kana(char):
word_bytes += convert_hex_bytes(char_bytes)
else:
word_bytes += convert_binary_bytes(char_bytes)
return word_bytes
words = ["飛出す", "飛びだす", "とび出す", "他の単語"]
results = {word: conert_word(word) for word in words}
stand_word = "飛び出す"
import difflib
# 定义目标单词和候选列表
word = "飛出す"
# 标准形式
# TODO 这里是一个列表233,查起来不会非常慢么2333
possibilities = ["飛び出す", "飛ぶ","飛び立て","飛付く"]
# 使用 get_close_matches 查找相似的单词
matches = difflib.get_close_matches(word, possibilities, n=3, cutoff=0.6)
print(f"与 '{word}' 最接近的匹配项有: {matches}")
import difflib
# 要比较的两个字符串
str1 = "飛出す"
str2 = "飛び出す"
# 创建 SequenceMatcher 对象
matcher = difflib.SequenceMatcher(None, str1, str2)
# 获取相似度比例
similarity_ratio = matcher.ratio()
print(f"相似度比例: {similarity_ratio:.2f}")
```