【发布时间】:2015-02-23 23:36:53
【问题描述】:
当我在PyPI 中搜索“XML 解析”时,匹配的结果按“权重”列出。当我将鼠标悬停在“权重”上时,它会显示“按字段(名称、摘要、关键字、描述、作者、维护者)加权的搜索词的出现”。
“按字段(名称、摘要、关键字、描述、作者、维护者)加权”是什么意思?
理想情况下,排名较高的软件包是否最有可能优于排名较低的软件包?
谢谢。
【问题讨论】:
-
这是关于我如何从 PyPI 中挑选包的。
当我在PyPI 中搜索“XML 解析”时,匹配的结果按“权重”列出。当我将鼠标悬停在“权重”上时,它会显示“按字段(名称、摘要、关键字、描述、作者、维护者)加权的搜索词的出现”。
“按字段(名称、摘要、关键字、描述、作者、维护者)加权”是什么意思?
理想情况下,排名较高的软件包是否最有可能优于排名较低的软件包?
谢谢。
【问题讨论】:
有趣的问题!我克隆了pypi repository 并搜索了“重量”,这给了我这一行:
./templates/index.pt:15: <th tal:condition="exists:data/scores"><u title="Occurrence of search term weighted by field (name, summary, keywords, description, author, maintainer)">Weight*</u></th>
然后基于此我搜索“分数”,这导致我找到了search 函数。在该函数中,它定义了赋予不同列的权重:
columns = [
('name', 4), # doubled for exact (case-insensitive) match
('summary', 2),
('keywords', 2),
('description', 1),
('author', 1),
('maintainer', 1),
]
因此,如果您的搜索词出现在包名称中,则得分为 4,如果出现在摘要中,则得分为 2,依此类推。它为每个术语计算此值,然后将它们全部相加。
在您的示例中,对于“XML 解析”,顶部包是 Products.ParsedXML。分数是这样计算的:
而18确实是搜索结果页上的分数。
因此,要获得尽可能高的分数,您需要让每个字段都与所需的搜索词匹配(又名“keyword stuffing”)。如果你正在考虑发布一个包,我不建议你尝试玩这个系统。评分算法很简单,因为它依赖于诚实的人。如果每个人都试图在这些字段中填充额外的关键字以获得更高的分数,那将是一团糟,最终会得到更差的搜索结果。
【讨论】:
jobskills = {'java': 10, 'python': 20, 'jquery': 5}
candidateskills = ['python', 'java','angular']
foundskills={k:jobskills[k] for k in candidateskills if k in jobskills}
print sum(foundskills.values())
【讨论】: