其他语言的词云

时间:2016-01-28 10:28:19

标签: javascript persian word-cloud farsi

我使用JasonDavies's Word Cloud作为我的项目,但是我有一个问题,我使用波斯语[波斯语]字符串和我的问题,在Svg中单词重叠。

这是我项目的输出:

This is my project's output

波斯语单词怎么了?

1 个答案:

答案 0 :(得分:4)

About page for the project所述,生成器需要检索字形的形状,以便能够计算放置其他单词“安全”的位置。 about页面更详细地解释了这个过程,但这是我们关心的:

  1. 将字形单独呈现给隐藏的<canvas>元素。
  2. 检索像素数据
  3. 派生边界框
  4. 生成“云”一词。
  5. 现在,关键的见解是,在西方(和许多其他)脚本中,字形不会经常根据上下文改变形状。是的,有连字这样的东西,但它们通常很少见,而且对于剧本来说绝对不是必要的

    然而,在波斯语中,字形将根据上下文而改变。对于非波斯语读者,请查看ی和س,当它们合并时,它们会成为。是的,最后一个是两个字形!

    该算法在处理波斯语字符时实际上没有问题,正如您可以通过在关于页面的黑客攻击中看到的那样,在生成d.code之后放置一个断点,以便能够修改它:

    source of bbtree.js on the about page, with a breakpoint at line 129

    1740替换为上面第一个波斯字形的charCode,让算法运行,在字形周围显示漂亮且完全正确的边界框:

    render of ی and its bounding boxes

    问题在于,当实际渲染单词云时,字形将放置在上下文中并且...更改形状。但是,生成器不知道这一点,并继续使用旧的边界数据来放置其他单词,从而创建您目睹的重叠。此外,可能还存在从右到左处理文本的问题,这当然无济于事。

    我鼓励你直接把它作为发电机的作者。该项目有一个GitHub页面:https://github.com/jasondavies/d3-cloud所以在那里打开一个问题(也许可以回过头来看这个答案)会有所帮助!