我目前对算法的概念有疑问。 我想创建一个与我现有的[bbcode]编辑器相同的WYSIWYG编辑器。
为此,我将div
的{{1}}设置为WYSIWYG编辑器,并将contenteditable
包含相关的bbcode。直到那里,没有问题。但是我担心的是,如果用户想添加标签(例如textarea
标签),我需要知道他们想在哪里添加标签。
为此,我需要确切知道应该在bbcode中的哪个位置插入标签。我想比较这两个文本(一个带有[b]
这样的html标签,另一个带有<span>
这样的bbcode标签),这就是我在努力的地方。
我做了一些研究,但是找不到任何可以帮助我的东西,或者我对它的理解不正确(也许我做错了研究)。我能找到的是[b]
,但是我真的不知道如何使其正常工作。
我也想到了另一种选择。我可以将代码放在光标位置之前的WYSIWYG编辑器中,并在每次遇到html标记时将其拆分。这样,我可以在bbcode编辑器中搜索第一个匹配项,然后从找到的最后一个索引开始搜索第二个匹配项,依此类推,直到到达光标指向的位置。
我不确定它是否会起作用,我发现该解决方案有点脏。我是完全错误还是应该这样?
感谢您的帮助。
答案 0 :(得分:0)
一种确定两种文本之间相似度水平的流行方法是计算提到的Jaccard相似度。引用维基百科:
Jaccard索引(也称为“联合上方的交集”和Jaccard相似系数)是用于比较样本集的相似性和多样性的统计信息。 Jaccard系数用于度量有限样本集之间的相似度,定义为交集大小除以样本集并集大小:
但是,如果您有大量文本,则计算两个文本的每种可能组合的完整Jaccard索引在计算上会非常昂贵。另一种估算此索引的方法称为 minhashing 。它所做的是使用几个(例如100个)独立的哈希函数来创建签名,并将其重复多次。整个过程具有很好的属性,即T1 = T2的概率(在所有排列上)与J(A,B)相同。
将相似文本(或任何其他数据)聚集在一起的另一种方法是使用 Locality Sensitive Hashing (本地敏感哈希),它本身就是KNN的近似值,通常比这更糟,但是绝对计算速度更快。基本思想是将数据投影到低维二进制空间中(也就是说,每个数据点都映射到一个N位向量,即哈希键)。每个哈希函数 h 必须满足敏感的哈希属性 prob [h(x)= h(y)] = sim(x,y),其中 sim(x ,[y]中的y)是感兴趣的相似度函数。对于点产品,可以将其可视化如下:
我们现在可以询问指示点的拥有量(在本例中为101),并且接近该点的所有内容都具有相同的哈希值。
编辑以回答评论
不,您问过文本相似性,所以我回答了。基本上,您会问如何预测字符在文本2中的位置。这取决于您分析作者的样式还是仅分析语法。在这两种情况中的任何一种情况下,恕我直言,您都需要某种统计信息,以判断在给定所有其他数据/文本的情况下此字符可能出现的位置。您可以使用n-gram,RNN,LSTM,Markov链或任何其他形式的顺序数据分析。