2

我在我的项目中使用了 JasonDavies 的 Word Cloud,但是我使用波斯语 [Farsi] 字符串存在一个问题,而我在这里的问题是单词在 Svg 中重叠。

这是我的项目的输出:

这是我项目的输出

波斯语怎么了?

4

1 回答 1

4

正如项目的 About 页面中所解释的,生成器需要检索字形的形状,以便能够计算出放置其他词的“安全”位置。关于页面更详细地解释了该过程,但这是我们关心的:

  1. 字形单独呈现给隐藏<canvas>元素。
  2. 检索像素数据
  3. 导出边界框
  4. 生成词云。

现在,关键的见解是,在西方(和许多其他)脚本中,字形不会经常根据上下文改变形状。是的,有诸如连字之类的东西,但它们通常很少见,而且绝对不是脚本所必需的。

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

该算法实际上在处理波斯字符时没有问题,正如您通过在 about 页面上破解演示所看到的那样,在d.code生成之后放置一个断点,以便能够对其进行修改:

about 页面上 bbtree.js 的源代码,断点位于第 129 行

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

ی 及其边界框的渲染

问题是,当实际呈现词云时,字形被放置在上下文中并且......改变了形状。但是,生成器不知道这一点,并继续使用旧的边界数据来放置其他词,从而创建您所看到的重叠。此外,可能还有一个关于从右到左处理文本的问题,这肯定无济于事。

我鼓励你直接把它交给生成器的作者。该项目有一个 GitHub 页面:https ://github.com/jasondavies/d3-cloud所以在那里打开一个问题(并可能参考这个答案)会有所帮助!

于 2016-01-28T11:06:35.100 回答