Компоненты проверки орфографии для Delphi - PullRequest
7 голосов
/ 04 апреля 2009

Одним из требований к клиенту Twitter, который мы разрабатываем для сообщества, является компонент проверки орфографии. Какие компоненты / системы проверки орфографии вы использовали в приложениях и каков был ваш опыт их использования?

Ответы [ 8 ]

11 голосов
/ 04 апреля 2009

Addict Component Suite является наиболее полной версией Delphi, но она не бесплатна.

Но я думаю, что вы ищете бесплатное программное обеспечение для вашей утилиты для твиттера, я использовал LS Speller для бесплатного проекта и отлично работал со мной, он основан на ISpell, так что вы можете обновить его новыми версиями.

Но обновления D2009 пока нет, и, похоже, оно не разрабатывается активно.

Другой вариант использования встроенного в словарь MS Word .

5 голосов
/ 03 мая 2018

Windows поставляется с API для проверки орфографии (Windows 8).

TWindow8SpellChecker = class(TCustomSpellChecker)
private
    FSpellChecker: ISpellChecker;
public
    constructor Create(LanguageTag: UnicodeString='en-US');

    procedure Check(const text: UnicodeString; const Errors: TList); override; //gives a list of TSpellingError objects
    function Suggest(const word: UnicodeString; const Suggestions: TStrings): Boolean; override;
end;

С реализацией:

constructor TWindow8SpellChecker.Create(LanguageTag: UnicodeString='en-US');
var
    factory: ISpellCheckerFactory;
begin
    inherited Create;

    factory := CoSpellCheckerFactory.Create;
    OleCheck(factory.CreateSpellChecker(LanguageTag, {out}FSpellChecker));
end;

procedure TWindow8SpellChecker.Check(const text: UnicodeString; const Errors: TList);
var
    enumErrors: IEnumSpellingError;
    error: ISpellingError;
    spellingError: TSpellingError;
begin
    if text = '' then
        Exit;

    OleCheck(FSpellChecker.Check(text, {out}enumErrors));

    while (enumErrors.Next({out}error) = S_OK) do
    begin
        spellingError := TSpellingError.Create(
                error.StartIndex,
                error.Length,
                error.CorrectiveAction,
                error.Replacement);
        Errors.Add(spellingError);
    end;
end;

function TWindow8SpellChecker.Suggest(const word: UnicodeString; const Suggestions: TStrings): Boolean;
var
    hr: HRESULT;
    enumSuggestions: IEnumString;
    ws: PWideChar;
    fetched: LongInt;
begin
    if (word = '') then
    begin
        Result := False;
        Exit;
    end;

    hr := FSpellChecker.Suggest(word, {out}enumSuggestions);
    OleCheck(hr);

    Result := (hr = S_OK); //returns S_FALSE if the word is spelled correctly

    ws := '';
    while enumSuggestions.Next(1, {out}ws, {out}@fetched) = S_OK do
    begin
        if fetched < 1 then
            Continue;

        Suggestions.Add(ws);

        CoTaskMemFree(ws);
    end;
end;

Объект TSpellingError представляет собой тривиальную оболочку вокруг четырех значений:

TSpellingError = class(TObject)
protected
    FStartIndex: ULONG;
    FLength: ULONG;
    FCorrectiveAction: CORRECTIVE_ACTION;
    FReplacement: UnicodeString;
public
    constructor Create(StartIndex, Length: ULONG; CorrectiveAction: CORRECTIVE_ACTION; Replacement: UnicodeString);
    property StartIndex: ULONG read FStartIndex;
    property Length: ULONG read FLength;
    property CorrectiveAction: CORRECTIVE_ACTION read FCorrectiveAction;
    property Replacement: UnicodeString read FReplacement;
end;
2 голосов
/ 07 апреля 2009

Я использовал Addict и был очень доволен этим. Я использовал его в основном вместе с WPTools для слияния и отправки электронной почты.

2 голосов
/ 06 апреля 2009

В комментариях к блогу Кен только что предложил LS Spell , в котором используются словари ISpell. Он предназначен для Delphi 5, 6 и 7, поэтому, если он явно не использует другие типы строк, может работать нормально.

1 голос
/ 03 июня 2009

DevExpress VCL также имеет проверку орфографии, хотя я играл только немного. У меня также есть наркоман, который я использую в программных проектах.

1 голос
/ 09 апреля 2009

Я использую компонент TRichView в качестве своего «текстового редактора» в моем приложении Delphi.

Он поддерживает множество программ проверки орфографии, которые работают с Delphi. Вы можете сравнить те, которые он поддерживает:

http://www.trichview.com/features/spellcheck.html

1 голос
/ 06 апреля 2009

Вы можете использовать Aspell (версия Win32: http://aspell.net/win32/).

В вашем проекте Delphi вы можете использовать интерфейс командной строки: aspell pipe:

C:\Programme\Aspell\bin>aspell pipe
@(#) International Ispell Version 3.1.20 (but really Aspell 0.50.3)

hello
*

world
*

helllo
& helllo 18 0: hello, Helli, hell lo, hell-lo, hell, Heall, hallo, he'll, hullo,  Heller, heller, hellos, Jello, jello, Halli, Holli, hallow, hollow

wourld
& wourld 12 0: world, would, wold, whorled, wield, weld, wild, wooled, whirled, worlds, woulds, word
0 голосов
/ 05 апреля 2009

Если вы можете гарантировать, что на вашем клиенте всегда установлен MS Word, я бы предложил встроенную в MS Word проверку орфографии с OLE-автоматизацией.

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