Автор Aspell здесь.
Как я сказал в более раннем ответе, Вы не можете только объединить словари с различных языков и ожидать, что это будет работать. Необходимо создать новый язык, который сочетает функции этих двух языков оригиналов.
К счастью, для английского и немецкого языка это довольно легко; однако, качество предложения пострадает для английских слов, так как мы отключим использование подобного звуку поиска.
Установите aspell-en и aspell-de пакет словаря
Перейдите к пустому каталогу для содержания всего в чистоте. Также для предотвращения любых проблем набора символов изменяют локаль на "C" путем установки LC_ALL=C
.
Выведите английские и немецкие словари в списки слов плана
aspell dump master en > en.txt
aspell dump master de > de.txt
Объедините en.dat и de.dat, в котором можно обычно находить usr/lib/aspell
.
Английский словарь использует подобный звуку поиск, но это не будет с немецким словарем (вследствие того, что это английское конкретный, и более разрешенный к ввозу, это является несовместимым со сжатием Аффикса), таким образом, мы отключим его. Английский словарь не использует сжатие аффикса, но немецкий словарь делает так, мы будем просто использовать файл аффикса для немецкого словаря. (Это избежит необходимости разворачивать немецкий словарь и таким образом увеличение его размер).
Мы назовем язык что и требовалось доказать, 'q', так как очень немного языков запускаются с q, 'e' для английского и 'g' для немецкого языка. (Имя языка должно обычно быть 2 - 3 буквами, но aspell действительно не заботится, таким образом, en-de или некоторое другое имя могли бы работать, но 2 или 3 названия буквы, как гарантируют, будут работать),
Файл назовут qed.dat
и содержите следующее:
name qed
charset iso8859-1
special ' -*-
soundslike none
affix qed
affix-compress true
Копия de_affix.dat
в текущий каталог и переименовывают его qed_affix.dat
.
Создайте объединенный словарь:
cat en.txt de.txt | aspell create master -l ./qed ./qed.rws
Создайте файл qed.multi
:
add qed.rws
Протестируйте словарь при помощи -d ./qed
. ./
необходим, чтобы вынудить aspell искать текущий каталог.
Установка qed.dat
qed.rws
qed.multi
и qed_affix.dat
где-нибудь, где aspell найдет его. См. руководство для получения информации о том, как aspell ищет файлы данных языка и словарь.
Готово. Все должно работать теперь. Более комплексное решение включит некоторую форму подобного звуку поиска по лучшему качеству предложения. Но это требует специального ухода при использовании со сжатием аффикса (см. руководство Aspell для деталей). Как альтернатива может быть расширен немецкий словарь, и английский подобный звуку поиск может использоваться, но это не могло бы работать так хорошо над немецкими словами.
Случай расчесывания английского и немецкого языка был легок, потому что они оба используют тот же набор символов (iso-8859-1) и потому что только один язык использовал сжатие Аффикса. Объединение других языков возьмет больше работы, но это возможно, после того как Вы знаете то, что Вы делаете. Я разъяснил шаги здесь подробно для давания читателям некоторое представление того, как Aspell работает так, подобная вещь может использоваться для других комбинаций языка.
Если оба сжатия аффикса использования языков, или файлы аффикса должны будут быть объединены, таким образом, не будет никаких конфликтующих флагов, или один из словарей должен будет быть расширен.
Если эти два языка используют другой 8-разрядный набор символов, чем совместимый набор символов, который может поддерживать оба языка, мы должны использоваться. Если стандартный не существует, чем может быть создан новый. Для предотвращения беспорядка, списки слов должны быть преобразованы в utf-8, и Aspell должен быть проинструктирован для ожидания всего ввода и вывода в utf-8 вместо набора символов, который используется внутренне, который по историческим причинам является значением по умолчанию.
Если Вы знаете определение типа данных, Вы хотите Вас, может использовать getconf
узнать эти значения в большинстве систем Unix.
$ getconf CHAR_BIT
8
Список переменных определяется в странице справочника man limits.h
а также здесь, man sysconf
, в дополнение к тому, чтобы быть на диске. Можно использовать locate limits.h
для нахождения его он часто здесь: /usr/include/linux/limits.h
.
Да. Вы могли просканировать /usr/include/<arch>/limits.h
Например, на моем NetBSD amd64, /usr/include/amd64/limits.h
показал бы:
#define CHAR_BIT 8 /* number of bits in a char */
#define SCHAR_MAX 0x7f /* max value for a signed char */
#define SCHAR_MIN (-0x7f-1) /* min value for a signed char */
#define UCHAR_MAX 0xff /* max value for an unsigned char */
#define CHAR_MAX 0x7f /* max value for a char */
#define CHAR_MIN (-0x7f-1) /* min value for a char */
#define USHRT_MAX 0xffff /* max value for an unsigned short */
#define SHRT_MAX 0x7fff /* max value for a short */
#define SHRT_MIN (-0x7fff-1) /* min value for a short */
#define UINT_MAX 0xffffffffU /* max value for an unsigned int */
#define INT_MAX 0x7fffffff /* max value for an int */
#define INT_MIN (-0x7fffffff-1) /* min value for an int */
#define ULONG_MAX 0xffffffffffffffffUL /* max value for an unsigned long */
#define LONG_MAX 0x7fffffffffffffffL /* max value for a long */
#define LONG_MIN (-0x7fffffffffffffffL-1) /* min value for a long */
Отчасти.
С gcc, по крайней мере, это работает:
$ cpp -dD /dev/null | grep __SIZEOF_LONG__
Так или иначе, почему Вы не хотите писать программу C, чтобы сделать это? Вы могли отправить крошечную программу C в свой компилятор от оболочки что-то вроде этого:
binary=$(mktemp)
cat <<\EOF | cc -o $binary -x c -
#include <stdio.h>
int main() {
printf("int=%lu bytes\n", sizeof(int));
printf("long=%lu bytes\n", sizeof(long));
}
EOF
$binary
rm $binary
-x c
говорит компилятору, что язык C
, и -
средства считаны из стандартного входа.
В моей системе, вышеупомянутой печати:
int=4 bytes
long=8 bytes
Протестированный в gcc и лязге.
Нет... возможно выполнить двоичные файлы с различными идеями размеров основных типов, особенно на архитектуре на 64 бита. Недавние ядра Linux на x86_64 могут выполнить собственные двоичные файлы на 32 бита, и существует x32 ABI с типами на 32 бита.
Размеры типа данных частично, что использует компилятор. Но явно выгодно (1) использовать типы, которые машина поддерживает эффективно и (2) использовать типы последовательно от библиотек низкого уровня до пользовательских приложений. Необходимость обработать несколько вариантов является просто путаницей.
Если Вам установили жемчуг, можно получить это от жемчуга-V:
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Размеры типов данных являются свойством компилятора (или ABI), не системы. У Вас может быть несколько компиляторов с помощью различных размеров для типов данных в той же системе.
Попробуйте это, чтобы проанализировать и вывести строки, содержащие строки, относящиеся к типам данных:
{ shopt -s globstar; for i in /usr/include/**/*.h; do grep -HE '\b(([UL])|(UL)|())LONG|\bFLOAT|\bDOUBLE|\bINT' $i; done; }
Это, конечно, улавливает определения в /usr/include/limits.h
, так что вы получите этот плюс больше, иногда со значениями, но в основном ссылаясь на то, что установлено в limits.h
, которое вы можете легко просмотреть с помощью команд getconf -a
и ulimit -a
.
getconf
был самый безопасный путь, пока Вы говорите, я поражаю официальный компилятор в поле. – slm♦ 14.02.2014, 19:52getconf
не так безопасно, если Вы не называете компилятор C какc89
илиc99
с (почти) никакой опцией. – Gilles 'SO- stop being evil' 14.02.2014, 21:17