我应该使用哪个JavaScript库来进行客户端断字处理?

20

我想在网站上的一些大文本中通过JavaScript实现客户端断字功能。(我知道CSS3断字功能,但通常不可用。)

我已经使用了Hyphenator.js,它运行良好,但非常庞大(仅包含英语的优化编译版本大小为106 KB),而且速度相对较慢。它的体积和速度足以让我考虑放弃断字功能。毕竟这只是一种奢侈品。

但最近我发现了另一种可能的替代方案:Hypher。令我困惑的是,Hypher可以如此小巧,却能完成同样的工作。我想知道是否有人能解释这个问题。

Hypher的效果是否与Hyphenator.js一样好?是否有理由使用Hyphenator.js?Hypher的自述文件中提供了一个指向Hyphenator.js页面底部的链接,但其中没有解释这些项目之间的联系。

有人对客户端最高效的断字有什么看法吗?

2个回答

20

我查看了 JavaScript 中的连字符处理,并找到了以下四个库:

  • hy-phen:是由 Yevhen Tiurin 开发的纯 JavaScript 库,使用 MIT 许可证自 2016 年以来。您可以调用 JavaScript 函数来处理字符串中的连字符。您只需要包含主 JavaScript 文件和所需的语言文件即可使用。
  • Hypher:是由 Bram Stein 开发的纯 JavaScript 库,使用 "Three Clause BSD" 许可证自 2011 年以来。您可以调用两个 JavaScript 方法来处理字符串中的连字符。它只能使用 Node.js 或 jQuery 进行安装。
  • Hyphenator.js:是由 Mathias Nater 自 2008 年以来使用 MIT 许可证开发的 JavaScript/HTML 实现。 该项目自 2018 年起已停止维护。 将其包含在您的项目中不是那么简单 - 您需要先使用 Merge&Pack 工具创建一个 JavaScript 文件,然后才能将其包含。它会自动扫描 HTML 页面并向选定的 HTML 元素添加连字符。没有可以手动调用的 JavaScript 函数来处理字符串中的连字符。
  • Hyphenopoly.js:是Hyphenator.js的后续项目,由Mathias Nater自2016年以MIT许可证开发。它删除了Hyphenator.js的某些功能,并且使用起来更加简单。尽管如此,它的工作方式相同,这意味着没有JavaScript函数可以手动对字符串进行连字。
  • 这四个库都使用由Franklin M.Liang开发的连字算法,该算法使用匹配模式在单词中查找连字点。正如Liang在他的论文中所述,该算法并不能提供100%正确的连字:

    这些模式在口袋词典单词列表中找到89%的连字符,基本上没有错误。


    1
    如果您不仅限于JavaScript,您有更好的连字算法建议吗?感谢您的帮助。 - Crashalot
    @Crashalot 我还没有研究过那个话题。我只知道梁氏分词算法和另一个显而易见的解决方案,即使用包含每个单词和连字号定义的字典(与匹配模式相比),这似乎是 MS Word 所使用的方法。 - Krisztián Balla

    18
    主要原因是Hypher相对较小,是因为它依赖于外部加载的jQuery进行页面集成。Hyphenator.js是完全独立的,因此必须包含更多的样板文件以在各种浏览器中操作HTML。(他们甚至重新实现了一些jQuery功能。)
    公平地说,Hyphenator.js是一个相对较旧的项目,在途中没有完全重写以利用大量的浏览器改进。(请注意,他们自豪地支持Firefox 3.0。)而且,更加慷慨地说,Hyphenator.js有许多细粒度设置
    如果您已经使用了jQuery,并且不使用Hyphenator.js的高级API,则切换到Hypher可能会带来值得的改进。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接