2012-04-12 20 views
0

這是Synopse delphi open source的連字符庫。如何在delphi中使用這個Hyphenation庫?

該演示是一個控制檯應用程序。我不知道如何在GUI應用程序中使用它。

以下是我的測試,但不起作用。它不顯示帶連字符(或相互錯誤)的單詞。該庫可以是downloaded here:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, hyphen, StdCtrls; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    procedure testhyphenator; 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.testhyphenator; 
var 
    h: THyphen; 
    s: string; 
    F, L: Integer; 
begin 
    s := 'hyph_en_US.txt'; //this is from the folder, is that correct to call? 
    if FileExists(s) then 
    begin 
    F := FileOpen(s, fmOpenRead); 
    L := FileSeek(F, 0, soFromEnd); 
    if L > 0 then 
    begin 
     SetLength(s, L); 
     FileSeek(F, 0, soFromBeginning); 
     FileRead(F, s[1], L);  
    end; 
    FileClose(F); 
    end; 
    h := THyphen.Create(s); 
    h.Execute('pronunciation'); //is this correct? 
    ShowMessage(h.filllist); //not display hyphenated word 
end; 

它不顯示帶連字符的單詞。在演示中,我也對構造函數感到困惑:

H := THyphen.create('ISO8859-1'#10'f1f'#10'if3fa/ff=f,2,2'#10'tenerif5fa'); 
writeln('"',H.Execute('SchiffahrT'),'"'); writeln(H.FillList); 
... 

作者還附上了obj文件。如果我想將它編譯成一個exe文件,該怎麼做?

你能幫我理解如何正確使用它嗎?

非常感謝。

+1

你能更具體嗎? *不起作用*是您可以使用的最糟糕的問題描述。對於你的問題*如何鏈接* .obj文件*使用'{$ LINK'文件。obj'}'在你的單位。 – TLama 2012-04-12 11:13:17

+0

@TLama,謝謝你的回覆。請參閱編輯。我的意思是它不顯示帶連字符的單詞。 – Warren 2012-04-12 11:52:16

+0

1)您是否成功編譯過原始控制檯應用程序版本? 2)你的Delphi版本是什麼? – menjaraz 2012-04-12 16:12:49

回答

2

免責聲明:我利用了不是最近分佈的連字符,它可能不會與latest version同步。

這裏是我的觀點:

彙編我已經德爾福7下編譯分佈

  • 的,它是OK

hyphen.rc文件

  • 沒有hyph_en_EN.dic文件中的分佈。如果您要重建連字符,則可能需要修復連字符。RC使用下列內容:

連字符文本HYPH_EN_US.dic

  • 我沒有檢查的hyphen.res文件中的分佈閹它包含hyph_en_EN.dic和/或hyph_en_US.dic

* .DIC文件在我的分佈

  • hyph_it_IT.dic可用
  • hyph_es_ES.dic
  • hyph_fr_FR.dic
  • hyp_en_US.dic
  • hyp_de_DE.dic

回答評論在你的片段

s := 'hyph_en_US.txt'; //this is from the folder, is that correct to call? 

不!正確的文件擴展名是.dic。而應該寫:

s := 'hyph_en_US.dic; 

以下爲好(可以參考THyphen類的定義):

Execute('pronunciation'); // is this correct? 

以下爲好(但它不會因爲h作爲工作THyphen實例未正確初始化):

ShowMessage(h.filllist); //not display hyphenated word 

您對構造

關注
H := THyphen.create('ISO8859-1'#10'f1f'#10'if3fa/ff=f,2,2'#10'tenerif5fa'); 

這只是設置THyphen的正確方法之一(再次參考THyphen類別的定義等)。

例如:採用Delphi 2007的GUI應用程序

H := THyphen.create('EN'); 

駕馭連字符

  • 我可以告訴大家,它的確定,只要THyphen實例正確構造(不要忘記包含hyphen.res資源文件與{$R hyphen.res},hyphen.obj文件已鏈接在hyphen.pas單位)。

最後但並非最不重要

  • 隨時取得聯繫以Arnaud Bouchez背後Synopse偉人。他是一名Stackoverflow會員,並且隨時準備幫助確保最好的用戶
+0

非常感謝您的詳細解釋。我測試了你的代碼,現在可以。該過程生成可能的斷點作爲連字符。 '發音'生成pro = nun = ci = ation。它可以用作音節檢測。如果是這樣的話,我該如何修改該文件以將'ation'拆分爲'a = tion',最後纔有pro = nun = ci = a = tion?或者你能指導我進一步學習的資源嗎?再一次非常感謝你。 – Warren 2012-04-13 01:25:01

+0

不客氣。我必須向你承認:我對連字符一無所知,我只是深入瞭解源代碼,並儘可能地嘗試解決你的問題。我建議你張貼另一篇文章,並試圖引起我引用的連字符作者的注意。 – menjaraz 2012-04-13 05:00:33

1

我沒有我的德爾福安裝方便,所以理解你可能需要調整這一點。

查看連字符代碼後,我認爲您使用不正確。構造函數的參數是語言或字符集。

h := THyphen.Create('UTF-8'); 

或(根據您的文件名,我想你需要這下一個)

h := THyphen.Create('EN'); 

然後「執行」是用於生成傳遞的字符串的連字符的版本。「執行」是一個返回一個新字符串的函數。你在調用它,但沒有對結果做任何事情。

NewStr := h.Execute('correct'); 

「NewStr」現在應該等於「正確」。

如果我正確地讀取了代碼,「FillList」函數和過程返回所有可能的連字符可能性列表,這些連字符被執行了。

+0

非常感謝。你說得對,我沒有正確使用它。我測試了你的代碼,Filllist生成一個列表,每行代表一個分隔符。但我不能分裂接受的答案。 – Warren 2012-04-13 01:13:14

+0

沒問題。很高興我能幫上忙。獲得解決方案所需的東西比獲得解決方案點更重要。此外,menjaraz能夠爲你編譯和測試。 ;) – JerseyMike 2012-04-13 12:15:12