一个用于转换词典文件即词汇表的工具。
主要目的是能够在任何操作系统/设备上使用我们的离线词汇表于任何开源词典中。
有无数种格式,而我的时间有限,所以我实现那些对我自己或开源社区来说更有用的格式。同时也考虑到语言的多样性。欢迎提交拉取请求。
Linux - 基于Gtk3的界面
Windows - 基于Tkinter的界面
Linux - 命令行界面
Android Termux - 交互式命令行界面
注意:基于SQLite的格式不会通过扩展名(.db)来检测;
因此你需要选择格式(通过UI或--read-format标志)。
另外不要将基于SQLite的格式与SQLite模式混淆。
PyGlossary需要Python 3.10或更高版本,并且可以在几乎所有现代操作系统上运行。虽然主要为GNU/Linux设计,但它也能在Windows、Mac OS X和其他基于Unix的操作系统上运行。
如截图所示,有多种用户界面类型(多种使用程序的方式)。
基于Gtk3的界面,使用PyGI (Python Gobject Introspection) 你可以在以下系统上安装:
apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0zypper install python3-gobject gtk3dnf install pygobject3 python3-gobject gtk3pacman -S python-gobject gtk3brew install pygobject3 gtk+3nix-shell -p pkgs.gobject-introspection python38Packages.pygobject3 python38Packages.pycairo基于Tkinter的界面,在缺少Gtk的情况下可用。特别是在Windows上,Tkinter库随Python一起安装。 你也可以在以下系统上安装:
apt-get install python3-tk tixzypper install python3-tk tixyum install python3-tkinter tixnix-shell -p python38Packages.tkinter tix命令行界面,可以在所有操作系统上无需特定要求即可运行,只需输入:
python3 main.py --help
pip install prompt_toolkit$DISPLAY环境变量为空或未设置
tkinter模块--cmd或--ui=cmd手动选择
python3 main.py --cmd--no-interactive来强制禁用交互式界面
当你不带任何命令行参数或选项/标志运行PyGlossary时,PyGlossary会尝试找到PyGI并打开基于Gtk3的界面。如果失败,它会尝试找到Tkinter并打开基于Tkinter的界面。如果再次失败,它会尝试找到prompt_toolkit并运行交互式命令行界面。如果这些库都找不到,它会以错误退出。
但你可以使用--ui显式指定用户界面类型
python3 main.py --ui=gtkpython3 main.py --ui=tkpython3 main.py --ui=cmdpip,运行:python -m ensurepip --upgradepip install --upgrade pyglossarypyglossary命令某些格式有额外的要求。 如果你在任何格式上遇到问题,请查看该格式的链接以查看其文档。
在Android上使用Termux? 请参阅doc/termux.md
间接模式意味着输入词汇表被完全读取并加载到RAM中,然后转换为输出格式。这是旧版本(3.0.0之前)唯一可用的方法。
直接模式意味着条目被逐一读取、处理并写入输出词汇表。
直接模式的添加是为了限制大型词汇表的内存使用;但在大多数情况下也可能减少转换时间。
将词汇表转换为这些格式需要排序条目:
这就是为什么直接模式对这些格式不起作用,PyGlossary必须切换到间接模式(或者之前必须这样做,参见SQLite模式)。
对于其他格式,直接模式将是默认设置。你可以使用--indirect标志覆盖此设置。
如上所述,将词汇表转换为某些特定格式需要将它们加载到RAM中。
如果词汇表太大无法装入内存,这可能会出现问题。这时你应该尝试在命令中添加--sqlite标志。然后它会使用SQLite3作为中间存储来存储、排序和获取条目。这解决了内存问题,甚至可能减少转换的运行时间(取决于你的主目录存储)。
临时SQLite文件存储在缓存目录中,转换后会被删除(除非你传递--no-cleanup标志)。
如果auto_sqlite 配置参数为true(这是默认值),则在写入这些格式时会自动启用SQLite模式。这也适用于为任何格式传递--sort标志的情况。你可以使用--no-sqlite来覆盖此设置并切换到间接模式。
目前在SQLite模式下无法禁用备选项(--no-alts会被忽略)。
有两种情况可以激活条目排序:
--sort标志。如果传递--sort,你还可以传递:
--sort-key来选择排序键,即排序顺序(包括区域设置),参见doc/sort-key.md
--sort-encoding来更改用于排序的编码
?字节(仅用于排序)--sort-locale冲突缓存目录用于存储临时文件,这些文件在转换后会被移动或删除。你可以传递--no-cleanup标志以保留它们。
缓存目录的路径:
~/.cache/pyglossary/~/Library/Caches/PyGlossary/C:\Users\USERNAME\AppData\Local\PyGlossary\Cache\如果你想添加自己的插件而不将其添加到源代码目录,或者想使用已从存储库中移除的插件,可以将其放在以下目录:
~/.pyglossary/plugins/~/Library/Preferences/PyGlossary/plugins/C:\Users\USERNAME\AppData\Roaming\PyGlossary\plugins\doc/lib-examples目录中有一些示例。
这是一个将任何支持的词汇表格式转换为Tabfile的基本脚本:
import sys from pyglossary import Glossary # Glossary.init()应该只被调用一次,所以确保你将它放在正确的位置 Glossary.init() glos = Glossary() glos.convert( inputFilename=sys.argv[1], outputFilename=f"{sys.argv[1]}.txt", # 虽然它可以检测*.txt的格式,但你仍可以传递outputFormat outputFormat="Tabfile", # 你可以以字典形式传递readOptions或writeOptions # writeOptions={"encoding": "utf-8"}, )
如果你选择使用glossary_v2:
import sys from pyglossary.glossary_v2 import ConvertArgs, Glossary # Glossary.init()应该只被调用一次,所以确保你将它放在正确的位置 Glossary.init() glos = Glossary() glos.convert(ConvertArgs( inputFilename=sys.argv[1], outputFilename=f"{sys.argv[1]}.txt", # 虽然它可以检测*.txt的格式,但你仍可以传递outputFormat outputFormat="Tabfile", # 你可以以字典形式传递readOptions或writeOptions # writeOptions={"encoding": "utf-8"}, ))
你可以查看Glossary.convert的文档字符串以获取完整的关键字参数列表。
如果你需要在Python程序中添加条目(而不是将一个词汇表转换为另一个),那么你应该使用write而不是convert,这里是一个示例:
from pyglossary import Glossary Glossary.init() glos = Glossary() mydict = { "a": "test1", "b": "test2", "c": "test3", } for word, defi in mydict.items(): glos.addEntryObj(glos.newEntry( word, defi, defiFormat="m", # "m"表示纯文本, "h"表示HTML )) glos.setInfo("title", "My Test StarDict") glos.setInfo("author", "John Doe") glos.write("test.ifo", format="Stardict")
注意: 在pyglossary.glossary_v2中,addEntryObj被重命名为addEntry。
注意: 切换到glossary_v2是可选的,但建议使用。
如果你需要将词汇表从文件读入内存中的Glossary对象(而不是立即转换它),你可以使用glos.read(filename, format=inputFormat)。在这种情况下要注意内存使用。
如果你想在创建的词汇表中包含图片、css、js或其他文件,你需要将它们作为数据 条目添加,例如:
with open(os.path.join(imageDir, "a.jpeg")) as fp: glos.addEntry(glos.newDataEntry("img/a.jpeg", fp.read()))
newDataEntry的第一个参数必须是相对路径(通常是定义的html代码指向的路径)。
词汇表包含多个条目。
每个条目包含:
在PyGlossary中,词头和备选项一起作为单个Python列表entry.l_word可访问。
entry.defi是定义,为Python Unicode str。另外,entry.b_defi是UTF-8字节数组形式的定义。
entry.defiFormat是定义格式。如果定义是纯文本(非富文本),值为m。如果是HTML(包含任何html标签),则defiFormat为h。XFXF也允许使用值x,但XDXF在词典应用程序中不广泛支持。
还有另一种类型的条目称为数据条目,通常包含输入词汇表中包含的图像、音频、css或任何其他文件。对于数据条目:
entry.s_word是文件名(而l_word仍然是包含此字符串的列表),entry.defiFormat为bentry.data给出文件内容的bytes。条目过滤器是内部对象,用于修改条目的单词/定义,或在某些特殊情况下删除条目。
它们就像管道中的多个过滤器,连接着"读取器"对象和"写入器"对象(这两个类都在插件中定义并在"词汇表"类中实例化)。
你可以使用配置参数/命令行标志来启用/禁用其中一些过滤器,这些参数在 doc/config.rst 中有详细说明。
完整的条目过滤器列表也在 doc/entry-filters.md 中有详细说明。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为 卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号