《拉鲁斯法汉双解词典》 文本数据(OCR)

我看了下注音错误很多,而且也有大模型幻觉自己编的情况。 整理了一下格式,主要修复了注音方括号的问题,还有转义缺少箭头的问题。然后写了个python脚本解决跨页问题,把这个切分成了json文件,实际条目不够38000条。另外再提供一个夸克识别的版本,质量也还行,是docx,分割500页处理的,docx是带格式的,也需要写程序处理。
我感觉弄2-3个版本的文本然后分块对比校对比较好。

拉鲁斯法汉双解词典 整理.zip (19.3 MB)

1 个赞

谢谢,辛苦了。不过在把文本捋顺之前,其他操作不着急。初始OCR稿的毛病不少,我在简单核对起始页遗漏文字问题时,发现有两批文本(P1051、P1326起各25页)存在重大缺陷,把黑点序号遗失了,或者统一识别为●,于是重新OCR更换了文本。因为在主帖内尚未更新,您修复注音方括号、箭头等劳作等于用到了空处。

在论坛上更新文本不方便,我考虑把它放在github开一个专门的repo,这样可以多人协作异步操作。

我先把主帖的文本更新一下,主要的差异是替换了重新OCR的50页文本,初步检查了每一批pdf(25P)起始页有没有文本遗漏。

用其他OCR引擎的识别结果文本对校很有效,我经常干,但恐怕不太适用《拉鲁斯法汉双解词典》这类多语种复杂文本,输出格式的差异很多,把人眼睛都看花了,且文字量很大。

主帖暂时不让编辑了,把更新过的文本放在这里。

[拉鲁斯法汉双解词典 文本(初步整理原始OCR稿,慎用)]废稿已删

2 个赞

其实完全可以对比校对的,目前感觉整体gemini更准,但也有不少两个版本都错误的情况。

音标问题我感觉因为法语发音比较有规律,可以直接根据拼写或者tts之类生成一个再比较

删除zsbd

删除zsbd

放一个我自己ocr的词典文件,随便看看,错误很多,估计漏词也很多。不忍看,所以一直也没放出来。
拉鲁斯法汉双解词典ocr.rar (5.6 MB)

2 个赞

音标部分错误不是什么难题,可以批量技术性处理,比如把“单词 [音标]”这部分内容用正则全部提取出来,让ai处理,校对,或者再找一个完善的法文单词音标库(最好同属拉鲁斯系列词典),抽取相关内容互校。

我当下比较关心的问题是前后页面接续部分、同一页面两栏衔接部分可能存在文字遗漏、错位,目前还未全部检查处理。

我一般用vs code、winmerge比较文件,都看上去很花,还没用过beyond compare,你的对比效果不错,我也找来试试这个软件。

谢谢。你有没有mdx生成前的txt文件,它的词头排序和原文通常是对应的,至于mdx词典解包后得到的txt,怎么排序就很难说了。

拉鲁斯法汉双解的底本有电子版吗?如果有的话可以拿文本数据来校对,朗氏德汉双解是有的,不需要校对,直接 OCR 中文插入到原文里就可以了。

这些错误,在大模型中实际可以通过事先测试、完善prompt而改进,让它注意音标的加注方式,声明用了[ɛ̃][œ̃][ɑ̃][ɔ̃]等这些符号,双重检查页面衔接处的文字遗漏状况等,我在这里偷了一下懒,并没有全面测试系统prompt。

目前只找到图像版的 Dictionnaire de la langue française - LAROUSSE, 樂如思法語辭典 = Dictionnaire De La Langue Franaise. Le ru si fa yu ci dian = Dictionnaire De La Langue Franaise - Anna’s Archive

最新版好像是24年的,我看网上都没有。校对的话我之前写过一个工具可以对照显示不同文本和图片,但需要导出pdf中每个词的坐标。

拉鲁斯的官方网站就有音标数据,有空我写个爬虫提取一下相关内容。

不过优先事项是检查词头、词条内容的完整性,没有遗漏和错位等。

^.{1,20} \[提取,做了一个简单粗暴版的拉鲁斯词头索引,可以用它去 Dictionnaire Français-Anglais en ligne - Larousse 撞库取音标。

拉鲁斯 词头索引.txt (358.2 KB)

爬虫也让ai协助写好了,测试运行没有问题,不过速度比较慢,我暂时没让它继续跑。

import requests
from bs4 import BeautifulSoup
import time
import os

# --- 配置 ---
# 包含单词列表的输入文件名
INPUT_FILENAME = r'C:\Users\xxx\Desktop\拉鲁斯 词头索引.txt'
# 保存结果的输出文件名
OUTPUT_FILENAME = r'C:\Users\xxx\Desktop\resultats.txt'
# 基础URL,单词将附加到末尾
BASE_URL = 'https://www.larousse.fr/dictionnaires/francais-anglais/'

# 设置请求头,模拟浏览器访问
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

def get_phonetic(word):
    """
    为单个单词获取其所有音标,并正确拼接。
    """
    word = word.strip()
    if not word:
        return "单词为空"

    url = BASE_URL + word
    
    try:
        response = requests.get(url, headers=HEADERS, timeout=10)
        
        if response.status_code == 200:
            soup = BeautifulSoup(response.content, 'html.parser')
            phonetique_spans = soup.find_all('span', class_='Phonetique')
            
            if phonetique_spans:
                # 提取所有文本片段
                all_phonetics_text = [span.get_text(strip=True) for span in phonetique_spans]

                return ''.join(all_phonetics_text)
            else:
                return "音标未找到"
        else:
            return f"页面加载失败 (状态码: {response.status_code})"
            
    except requests.exceptions.RequestException as e:
        return f"请求错误: {e}"

def load_processed_words():
    """
    读取输出文件,返回一个包含所有已处理单词的集合(set)。
    """
    processed = set()
    if not os.path.exists(OUTPUT_FILENAME):
        return processed
    
    with open(OUTPUT_FILENAME, 'r', encoding='utf-8') as f:
        for line in f:
            parts = line.strip().split(': ', 1)
            if len(parts) > 0 and parts[0]:
                processed.add(parts[0])
    return processed

def main():
    """
    主函数,负责读取文件、循环处理和追加保存结果。
    """
    if not os.path.exists(INPUT_FILENAME):
        print(f"错误:输入文件 '{INPUT_FILENAME}' 未找到。")
        return

    processed_words = load_processed_words()
    if processed_words:
        print(f"已在 '{OUTPUT_FILENAME}' 中找到 {len(processed_words)} 个已处理的单词,将跳过它们。")

    with open(INPUT_FILENAME, 'r', encoding='utf-8') as f_in:
        words_to_process = [line.strip() for line in f_in if line.strip()]

    words = [word for word in words_to_process if word not in processed_words]
    
    if not words:
        print("所有单词均已处理完毕,无需操作。")
        return

    print(f"共 {len(words_to_process)} 个单词,还需处理 {len(words)} 个。开始爬取...")
    
    with open(OUTPUT_FILENAME, 'a', encoding='utf-8') as f_out:
        for i, word in enumerate(words):
            print(f"[{i+1}/{len(words)}] 正在查询: {word} ...")
            phonetic_text = get_phonetic(word)
            result_line = f"{word}: {phonetic_text}"
            print(f"  -> 结果: {phonetic_text}")
            f_out.write(result_line + '\n')
            f_out.flush() 
            time.sleep(0.5)
            
    print(f"\n本次任务处理完毕!结果已追加到 '{OUTPUT_FILENAME}' 文件中。")

if __name__ == '__main__':
    main()

每页的起首文字校对到625页,发现p213、302、537、609都有严重的幻觉错误,已经替换。同时也和夸克OCR得到的文本互校了部分文字,获得了一个可喜的消息——《拉鲁斯法汉双解词典》用Gemini识别出来的文本无论中法文文字本身的错误率很低,或许跟正式的出版物也没什么区别。差错主要集中在音标,❶❷❸❹❺❻❼❽❾、◆◇→‖ 这些符号,以及标点上,也不算特别难修正。

2 个赞

删除zsbd