从stardict syn文件中提取数据

时间:2015-01-25 09:53:37

标签: extract

我正在尝试从startdict syn文件中提取数据。

我正在尝试转换数据文件:

> file Babylon_Korean_English.syn
Babylon_Korean_English.syn: data

进入纯文本文件。

该文件可在此处找到:http://abloz.com/huzheng/stardict-dic/babylon/bidirectional/stardict-babylon-Babylon_Korean_English-2.4.2.tar.bz2在tar.bz2

我希望能够从文件中提取行,但是如果我这样做的话,例如:

> grep 느려 Babylon_Korean_English.syn

我只收到回复:

Binary file Babylon_Korean_English.syn matches

而不是能够找到整行或在文件前后搜索多个字符。

我也试过了:

> strings Babylon_Korean_English.syn

不输出任何东西。

尝试输出带有'head'的第一行,给出如下文本:

...�간헐적일거야�간헐적일거예요...

我希望能够看到文本文件,而不是那个小 。

有关文件格式的信息如下:

来自http://www.stardict.org/StarDictFileFormat

{4}。 “,syn”文件的格式。 这个文件是可选的,你应该注意到树字典不需要这个文件。 只有StarDict-2.4.8和更新版本支持此文件。

.syn文件包含同义词的信息,即输入时的含义 同义词,StarDict将搜索与其相关的另一个单词。

格式很简单。每个项目包含一个字符串和一个数字。 synonym_word; //由'\ 0'终止的utf-8字符串。 original_word_index; // .idx文件中的原始单词索引。 然后其他项目没有分离。 当您输入synonym_word时,StarDict将搜索original_word;

“synonym_word”的长度应小于256.在其他情况下 单词,(strlen(word)< 256)。 original_word_index是网络字节顺序中的32位无符号数。 两个或更多个项目可以具有相同的“synonym_word” original_word_index。 必须使用带有synonym_word的stardict_strcmp()对项目进行排序。

1 个答案:

答案 0 :(得分:0)

我终于能够通过下载BGL文件解析syn文件,然后使用pyglossary创建一个新的syn文件,修改如下:

./pyglossary > git diff pyglossary/plugins/stardict.py
diff --git a/pyglossary/plugins/stardict.py b/pyglossary/plugins/stardict.py
@@ -392,7 +392,7 @@ class StarDictWriter:
-                synStr += item[0] + '\x00' + intToBinStr(item[1], 4)
+                synStr += item[0] + ' ' + str(item[1]) + "\n"

这符合我的目的,因为我仍然可以访问.bgl文件。