【问题标题】:How to use this Hyphenation library in delphi?如何在 delphi 中使用这个连字符库?
【发布时间】:2012-04-12 11:05:48
【问题描述】:

这是Synopse delphi open source 的连字符库。

演示是一个控制台应用程序。我不知道如何在 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,该怎么做?

你能帮我理解如何正确使用它吗?

非常感谢。

【问题讨论】:

  • 您能说得更具体些吗? 不起作用是对您可以使用的问题的最糟糕的描述。对于您的问题如何链接 *.obj 文件在您的单元中使用{$LINK 'file.obj'}
  • @TLama,感谢您的回复。请参阅编辑。我的意思是它不显示连字符。
  • 1) 您是否在您的机器上成功编译了原始控制台应用程序版本? 2) 你的 Delphi 版本是什么?
  • 你为什么不在 Synopse 论坛上发布你的问题:synopse.info/forum/viewtopic.php?id=74 我相信程序的作者 Arnaud Bouchez 会在那里回答你(如果他不在这里回答你首先)。

标签: delphi hyphenation


【解决方案1】:

免责声明:我使用了一个不是最近发布的连字符,它可能与 latest version 不同步。

这是我的观点:

分发编译

  • 我在Delphi 7下编译过,OK

连字符.rc 文件

  • 发行版中没有 hyph_en_EN.dic 文件。如果您要重建 hyphen.res,您可能需要使用以下方法修复 hyphen.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

sn-p 中 cmets 的答案

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

不!正确的文件扩展名是.dic。你应该改写:

s := 'hyph_en_US.dic;

以下就ok了(可以参考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 类的定义等)。

例如:

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

使用 Delphi 2007 在 GUI 应用程序中利用连字符

  • 我可以说只要THyphen实例构造正确就可以了(不要忘记在{$R hyphen.res}中包含hyphen.res资源文件,hyphen.obj文件已经链接在hyphen.pas单元中) .

最后但并非最不重要的

  • 随时联系Arnaud BouchezSynopse 背后的伟人。他是 Stackoverflow 成员,并且随时准备提供帮助,而且他还是顶级 用户。

【讨论】:

  • 非常感谢您的详细解释。我测试了你的代码,现在可以了。该过程将可能的断点生成为连字符。 “发音”生成 pro=nun=ci=ation。它可以用作音节检测。如果是这样,我如何修改该 dic 文件以将“ation”拆分为“a=tion”,最后得到 pro=nun=ci=a=tion?或者你能指导我去进一步研究的资源吗?再次非常感谢您。
  • 不客气。我必须向你坦白:我对连字符一无所知,我只是深入研究了源代码,并尽我所能来解决你的问题。我建议你再发一篇文章,并试图引起我引用的连字符作者的注意。
【解决方案2】:

我没有方便地安装我的 Delphi,所以请理解您可能需要稍微调整一下。

看了连字符代码后,我相信你用错了。构造函数上的参数是语言或字符集。

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

或(根据您的文件名,我认为您需要下一个)

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

然后“Execute”用于生成传入字符串的连字符版本。“Execute”是一个返回新字符串的函数。您正在调用它,但没有对结果做任何事情。

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

“NewStr”现在应该等于“正确”。

如果我正确阅读了代码,“FillList”函数和过程会返回一个列表,其中列出了执行的最后一个单词的所有可能的断字可能性。

【讨论】:

  • 非常感谢。你是对的,我没有正确使用它。我测试了你的代码,Filllist 生成一个列表,每一行表示一个分隔符。但我不能拆分接受的答案。
  • 没问题。很高兴我能帮上忙。你得到你需要的东西比我得到解决方案点更重要。此外,menjaraz 能够为您编译和测试。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多