Можно ли передать несколько словарь в Enchant? - PullRequest
6 голосов
/ 24 октября 2019

Есть ли способ использовать несколько словарей в Enchant. Это то, что я делаю,

import enchant
d = enchant.Dict("en_US")
d.check("materialise")
>> False

Но если я использую enchant.Dict("en_UK"), я получу True. Каков наилучший способ объединения нескольких словарей, чтобы он возвращал True независимо от того, materialise или materialize в качестве входного аргумента?

Ответы [ 2 ]

1 голос
/ 28 октября 2019

@ Mass17, это на самом деле не правильно. Выражение "en_US" and "en_UK" является логической операцией AND для 2 строк, результатом которых является "en_UK". Вот как работает оператор AND в вышеприведенном выражении: (1) во-первых, любая непустая строка считается True, (2) если левая строка равна True, тогда правая строка проверяется и возвращается. Прочтите об оценке короткого замыкания Python, чтобы понять, почему он работает таким образом.

Итак:

>>> "en_US" and "en_UK"
'en_UK'

И обратите внимание, если вы измените порядок строк:

>>> "en_UK" and "en_US"
'en_US'

Слова "материализация" и "материализация" ОБА появляются в вашем "en_UK" словаре, отсюда и результаты, которые вы получили. Вы еще не «объединили» 2 словаря.

1 голос
/ 24 октября 2019

Для словарей Hunspell есть обходной путь, если оба словаря совместно используют один и тот же файл .aff, и я предполагаю, что en_US и en_GB проходят это условие.

Автор - Сергей Куракин и сценарий Bash (dic_combine.sh) следующим образом:

#!/bin/bash

# Combines two or more hunspell dictionaries.
# (C) 2010 Sergey Kurakin <kurakin_at_altlinux_dot_org>

# Attention! All source dictionaries MUST share the same affix file.

# Usage: dic_combine source1.dic source2.dic [source3.dic...] > combined.dic

TEMPFILE=`mktemp`

cat $@ | sort --unique | sed -r 's|^[0123456789]*$||;/^$/d' > $TEMPFILE

cat $TEMPFILE | wc -l
cat $TEMPFILE
rm -f $TEMPFILE
rm -f $TEMPFILE 

Итак, вы должны поместить эти файлы словарей в каталог и запустить:

$ dic_combine en_US.dic en_GB.dic > en.dic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...