一级标题计算流程
<p><strong>获取一级联想文本</strong></p>
<ol>
<li>实例化TextAssociateIterator</li>
<li>循环ta.getIterator(max_stage=4) 最多退化4次,边收集和边去重文本,直到满足前端需求。
getIterator 迭代键的顺序是按照[u'middle', u'prefix', u'short', u'long']这个顺序进行遍历</li>
</ol>
<p><strong>getAssociatedText工作流程</strong></p>
<ol>
<li>文本长度大于1 小于等于15
1.1 如果退化步数为1,则进入前缀词联想
1.1.1 获取前缀词key,如果key对应文本数量大于0,则返回key,否则返回None
1.2 如果前缀词根无法获取数据
1.2.1 短文本切词
1.2.2 中文本切词
1.2.3 长文本切词</li>
<li>文本长度大于1 小于15
1.1 如果退化步数为1,且文本长度少于等于4,则进入前缀词联想
1.2 短文本切词
1.3 中文本切词
1.4 长文本切词</li>
<li>文本长度大于15
2.1 中文本切词
2.2 长文本切词</li>
<li>返回结果
<pre><code>{
'long':[
{u'total': 38,
u'type': u'set',
u'name': u'Associate:Text:Long:刘德华,成龙:Set',
u'weight': 2103,
u'math_txt': {u'刘德华': 915, u'成龙': 1188}}
}
]
}</code></pre></li>
</ol>
<p>短/中/长文本切词</p>
<ol>
<li>先把用户输入的文本切词,使用结巴切词,过滤掉词根不为中英文,过滤掉词根长度为1时,且占总长为小于0.2,词根按照从长到短排序,进行截取。</li>
<li>获取到词根后,提取每个词根对应文本数量作为权重,然后过滤掉权重为0的词根。再从小到大排序,取前5个词根</li>
<li>根据词根,按照退化的步数进行词根组合。组合数量由词根的数量决定。然后根据组合的权重(所有词根的权重相加),从小到大排序。得到列表sorted_li。
比如当前退化步数为1,词根数量为5个,每个组合词根数为5,那么组合数量就只有1个。
当前退化步数为2,词根数量为5个,每个组合词根数为4,那么组合数量为5个。</li>
<li>遍历词根组合sorted_li,分别获取词根对应的redis键,然后进行求交集,通过交集查看是否有没有匹配的文本,如果没有返回空字典,如果有返回键名,对应的文本数量,这个redis键的数据类型。</li>
<li>汇总数据返回结果</li>
</ol>