dict: 日常更新

This commit is contained in:
Dvel
2023-09-03 20:16:17 +08:00
parent 6a1c50649f
commit bd2b6ba021
14 changed files with 2714 additions and 1114 deletions

View File

@@ -11,19 +11,23 @@ import (
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
if len(os.Args) > 1 {
if os.Args[1] == "sort" {
switch os.Args[1] {
case "s":
goto SORT
}
if os.Args[1] == "temp" {
case "t":
rime.Temp()
return
case "p":
rime.CheckPolyphone(rime.BasePath)
return
case "tp":
rime.Pinyin(filepath.Join(rime.RimeDir, "cn_dicts/temp"))
return
}
}
// 临时
rime.Temp()
// Emoji 检查和更新
rime.CheckAndGenerateEmoji()
fmt.Println("--------------------------------------------------")

View File

@@ -7,14 +7,17 @@ import (
"os"
"strconv"
"strings"
"unicode/utf8"
)
// 一些临时用的函数
func Temp() {
// defer os.Exit(11)
//
// GeneratePinyinTest("你的行动力")
// GeneratePinyinTest("都挺长的")
// GeneratePinyinTest("血条长")
findP(BasePath, "谁")
}
// 列出字表中多音字的状况:是否参与自动注音
@@ -83,3 +86,55 @@ func polyphone() {
}
}
}
// 在字典中找到此行是否包含同义多音字如果包含切长度大于等于3从文件中删除这行并将所有删除的行写入到 1.txt 中
func findP(dictPath string, ch string) {
// open file
file, err := os.OpenFile(dictPath, os.O_RDWR, 0666)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
outFile, err := os.Create("1.txt")
if err != nil {
log.Fatalln(err)
}
defer outFile.Close()
lines := make([]string, 0)
isMark := false
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
if !isMark {
lines = append(lines, line)
if line == mark {
isMark = true
}
continue
}
if line == "" || strings.HasPrefix(line, "#") {
lines = append(lines, line)
continue
}
parts := strings.Split(line, "\t")
if len(parts) != 3 {
log.Fatalln("len(parts) != 3", line)
}
text := parts[0]
if strings.Contains(text, ch) && utf8.RuneCountInString(text) >= 3 {
outFile.WriteString(line + "\n")
} else {
lines = append(lines, line)
}
}
// 从 lines 重新写入 file
file.Truncate(0)
file.Seek(0, 0)
for _, line := range lines {
file.WriteString(line + "\n")
}
}

View File

@@ -44,8 +44,6 @@ var onlyOne = map[string]string{
"私钥": "si yao",
"甲壳": "jia ke",
"掉色": "diao se",
"变色": "bian se",
"上色": "shang se",
"怎么着": "zen me zhe",
"这么着": "zhe me zhe",
"那么着": "na me zhe",

View File

@@ -0,0 +1,94 @@
package rime
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
// 同义多音字
var polyphonicWords = []string{
"谁",
"血",
"熟",
"掴",
"爪",
"薄",
"剥",
"哟",
"嚼",
"忒", // te 不是tui 和 tei 是
"密钥",
"公钥",
"私钥",
"甲壳",
"掉色",
}
// 不检查的词汇
var polyphonicWordsFilter = []string{
"咀嚼",
"薄暮", "薄地", "薄海", "薄酒", "薄礼", "薄面", "薄命", "薄情", "薄弱", "薄田", "薄物细故", "薄幸", "薄情", "薄葬", "厌薄", "厚积薄发", "履薄临深", "德薄望轻", "菲薄", "履薄", "孤军薄旅", "薄太后",
"剥离", "剥夺", "剥削", "剥落", "剥蚀", "剥啄",
"熟稔", "黄熟",
}
// CheckPolyphone 检查 base、ext 中同义多音字是否有两种读音
// 例如「谁的」应该同时存在 shei de 与 shui de 两种读音
func CheckPolyphone(dictPath string) {
file, err := os.Open(dictPath)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 将含有同义多音字的词汇放入key 为词汇value 为注音
// 如果注音数组只有一个,则应该补充其他读音
m := make(map[string][]string)
isMark := false
sc := bufio.NewScanner(file)
for sc.Scan() {
line := sc.Text()
if !isMark {
if strings.HasPrefix(line, mark) {
isMark = true
}
continue
}
if line == "" || strings.HasPrefix(line, "#") {
continue
}
parts := strings.Split(line, "\t")
if len(parts) != 3 {
continue
}
text, code := parts[0], parts[1]
if containsPolyphonicWordsFilter(text) {
continue
}
for _, word := range polyphonicWords {
if strings.Contains(text, word) {
m[text] = append(m[text], code)
}
}
}
// 遍历 m输出单数读音的词汇
for text, codes := range m {
if len(codes)%2 != 0 {
fmt.Println(text)
}
}
}
func containsPolyphonicWordsFilter(text string) bool {
for _, filter := range polyphonicWordsFilter {
if strings.Contains(text, filter) {
return true
}
}
return false
}

View File

@@ -1,4 +1,18 @@
# 在 # -_- 上面是错词;下面是包含错词但不是错词。
元文件
桃花园
桃花缘
噌地
伶牙利
灵牙利
碧雪丹心
气嘘嘘
喘嘘嘘
长统袜
长统靴
铢铢较量
量角规
一天一炖
搏彩
知书识理
识理知书
@@ -1332,6 +1346,8 @@
年青
谐调
呆会
呆在
呆着
不惟
赢利
作主
@@ -3608,3 +3624,4 @@
六西格玛项目
六西格玛黑带
精益六西格玛
图元文件