把一个德国化合物分成身体和头部
char-split的Python项目详细描述
基于CharSplit的德语复合拆分器ngram
把一个德国化合物分成身体和头部
Autobahnraststätte -> Autobahn - Raststätte
本论文附录所述方法的实施:
Tuggener,Don(2016年)。德语的增量共指解析。苏黎世大学文学院。在
TL;DR
该方法计算ngram在单词开头、结尾和中间出现的概率,并确定最有可能发生拆分的位置。在
该方法对Germanet compound test set上的头部检测精度达到95%。在
提供了一个模型,训练了100万。来自维基百科的德语名词。在
用法
训练新型号:
$ python char_split_train.py <your_train_file>
其中<your_train_file>
每行包含一个单词(名词)。在
复合分裂
从命令行:
^{pr2}$输出所有可能的拆分,按分数排序,例如
$ python char_split.py Autobahnraststätte
0.84096566854 Autobahn Raststätte
-0.54568851959 Auto Bahnraststätte
-0.719082070993 Autobahnrast Stätte
...
作为一个模块:
$ python
>>> import char_split
>>> char_split.split_compound('Autobahnraststätte')
[[0.7945872450631273, 'Autobahn', 'Raststätte'],
[-0.7143290887876655, 'Auto', 'Bahnraststätte'],
[-1.1132332878581173, 'Autobahnrast', 'Stätte'],
[-1.4010051533086552, 'Aut', 'Obahnraststätte'],
[-2.3447843979244944, 'Autobahnrasts', 'Tätte'],
[-2.4761904761904763, 'Autobahnra', 'Ststätte'],
[-2.4761904761904763, 'Autobahnr', 'Aststätte'],
[-2.5733333333333333, 'Autob', 'Ahnraststätte'],
[-2.604651162790698, 'Autobahnras', 'Tstätte'],
[-2.7142857142857144, 'Autobah', 'Nraststätte'],
[-2.730248306997743, 'Autobahnrastst', 'Ätte'],
[-2.8033113109925973, 'Autobahnraststä', 'Tte'],
[-3.0, 'Autoba', 'Hnraststätte']]
文档拆分
从命令行:
$ python doc_split.py <dict>
从标准输入读取所有内容
写出来一样,用最好的分割
由中间点字符·
分隔。在
每一个单词都被拆分成尽可能多的次数 在包含德语单词的文件<;dict> 每行一个(允许以#开头的注释行)。在
默认字典的名称在文件doc_config.py
中。在
注意,doc_split
模块保留了一个已经拆分的字的缓存,
因此,长文档的处理速度通常会相应加快
比短的。
当程序结束时,缓存被丢弃。在
$ python sentence1.txt
Um die in jeder Hinsicht zufriedenzustellen, tüftelt er einen Weg aus,
sinnlose Bürokratie wie Ladenschlußgesetz und Nachtbackverbot auszutricksen.
$ python doc_split.py <sentence1.txt
Um die in jeder Hinsicht zufriedenzustellen, tüftelt er einen Weg aus,
sinnlose Bürokratie wie Laden·schluß·gesetz und Nacht·back·verbot auszutricksen.
作为一个模块:
$ python
>>> import doc_split
>>> # Constant containing a middle dot
>>> doc_split.MIDDLE_DOT
'·'
>>> # Split a word as much as possible, return a list
>>> doc_split.maximal_split('Verfassungsschutzpräsident')
['Verfassungs', 'Schutz', 'Präsident']
>>> # Split a word as much as possible, return a word with middle dots
'Verfassungs·schutz·präsident'
>>> # Split all splittable words in a sentence
>>> doc_split.doc_split('Der Marquis schlug mit dem Handteller auf sein Regiepult.')
Der Marquis schlug mit dem Hand·teller auf sein Regie·pult.
文档拆分服务器
由于启动时间的原因,您可以运行文档拆分器 作为一个简单的服务器,响应会更快。在
$ python doc_server [ -d ] <dict> <port>
服务器将加载<dict>
并监听<port>
。
客户必须
将UTF-8编码的原始数据发送到端口
关闭端口的写端,然后
服务器将返回分割数据。在
选项-d
使服务器返回已排序的字典
而不是分裂的词。每个单词都在一行上,
原始单词后跟制表符,然后是拆分单词。在
由于Python的限制,服务器是单线程的。在
默认字典和端口在文件doc_config.py
中。在
提供了一个普通客户端:
$ python doc_client <port> <host>
从标准输入中读取文档,
将其发送到运行在<host>
和<port>
上的服务器,
并将服务器的输出发送到标准输出。
因此它具有与doc_split
相同的接口
(除非无法指定字典),
但应该跑得快一点。在
默认主机和端口在文件doc_config.py
中。在
下载词典
要下载doc_split
和doc_server
的德语和荷兰语词典:
$ cd dicts
$ sh getdicts
这将从LibreOffice网站下载拼写插件,
提取单词表,并将五个文件写入当前目录。
它在/tmp
中留下了很多文件,这些文件不再需要了。在
- 字典
de-DE.dic
、de-AT.dic
和{}是 相当广泛(每个25万字) 并提供当前德语、奥地利语和瑞士语拼写。在 - 文件
de-1901.dic
提供了1901年至1996年期间使用的拼写。在 - 文件
misc.dic
是一个名词的集合,这些名词被错误地拆分并 因此,它们被包括在词典中,这样它们就不会被分开了。在 - 文件
legal.dic
包含法律术语。运行前将其拆下 如果你不想把它包括在内的话,就去做。在 - 文件
de-mixed.dic
是所有其他文件的合并。在 - 文件
nl-NL.dic
来自OpenOffice,提供荷兰语拼写 (当前未使用)。在
如果需要,可以在运行getdicts
之前添加自己的单词表。
它们必须是纯UTF-8文本,每行一个单词
从正确的语言开始通用电气代码(de
表示德语)。在
如果程序的拆分不够困难, 你可能想找到并使用一个较小的字典。在
- 项目
标签: