Neo4j Cypher查询问题:计算文档的Token与Lemma比值
解决Cypher查询中按文档统计Token/Lemma比值的问题
我来帮你搞定这个查询问题,先直接给修正后的语句,再慢慢拆解问题所在:
修正后的Cypher查询
MATCH (d:DOCUMENT)--(t:TOKEN)--(l:LEMMA) WHERE d.id IN {documentIds} WITH d, count(DISTINCT t) AS tokenCount, count(DISTINCT l) AS lemmaCount RETURN d.id AS id, toFloat(lemmaCount)/tokenCount AS ttr
问题原因分析
你原来的查询有两个需要注意的点,其中一个直接导致了ttr全为0.0:
- 整数除法截断:Cypher里如果两个整数做除法,会直接舍弃小数部分返回整数。比如你期望的2/3会被计算成0,这就是所有结果都是0.0的核心原因。通过把其中一个统计值转成浮点数(
toFloat()),就能得到正确的小数比值。 - 关于你担心的「跨文档统计」:其实原查询里的
WITH d已经是按单个Document节点分组统计了,这部分逻辑是没问题的,不需要额外调整分组规则。
验证示例结果
用这个修正后的查询,你提到的两个文档会得到预期结果:
- id10023:tokenCount=3,lemmaCount=2,ttr≈0.6667
- id10050:tokenCount=2,lemmaCount=2,ttr=1.0
内容的提问来源于stack exchange,提问作者Hannes
相关产品推荐
相关产品推荐

