如何准备与wordcloud2.js一起使用的双向文本

时间:2019-07-08 18:18:33

标签: text bidirectional wordcloud2

我有一个嵌套的二维数组的索引数组,该数组的元素对由一个短语和一个数字组成。

在没有双向文本的情况下,该短语出现在索引数组的每个元素的编号之前。如果存在双向文本,则短语会出现在数字后面。

如果短语编号对混合使用-即,某些短语编号对与LTR文本一起出现,而某些短语编号对与RTL文本一起出现,那么结果顺序将混合在一起,从而形成一个杂乱的列表,不能用于输入wordcloud.js函数。

我尝试过反转短语编号对中元素的顺序,这些短语在将短语压入索引数组之前被写入RTL,但无济于事。结果索引数组变得混乱。

var listItem = [];
var list = [];
$.each(countedPhrases, function(phrase, count) {

    console.log('phrase: ' + phrase);
    console.log('count: ' + count);

    listItem = [phrase, count];
    console.log('listItem: ' + listItem);

    list.push(listItem);
});

console.log('list: ' + list);'

示例console.log输出。

词组:النادر 数:321 listItem:النادر,321

词组:وتتلقاه 数:321 listItem:وتتلقاه,321

词组:终结 数:321 listItem:终结,321

词组:播客 数:45 listItem:播客,45

列表:النادر,321,وتتلقاه,321,终结,321,Podcast,45

1 个答案:

答案 0 :(得分:0)

此问题已解决,方法是将阿拉伯文本包装在以下两个Unicode控件\ u2067阿拉伯文本\ u2069中,然后再将其读入数组元素。

无需详细介绍,纠正问题的代码如下:

                if (name === 'searchKeyword') {
                    if (agex.test(value)) {
                        nakedArabic = value.match(agex);
                        searchItem.target = '\u2067' + nakedArabic.join('') + '\u2069';
                    } else {
                        searchItem.target = value;
                    }
                }                           

其中agex.text(value)是正则表达式测试是否存在阿拉伯字符。

简而言之,该问题是由一种称为溢出的问题引起的。两个Unicode控制字符将阿拉伯文本分隔开,同时保留其自然的从右到左的方向顺序。

您可以了解有关问题和解决方案here的更多信息。

罗迪