我对编程很陌生,所以我确信有一种更简洁的方式来提出这个问题,但我正在尝试创建一个个人书签程序。给定多个url,每个url都有一个按相关性排序的标记列表,我希望能够创建一个由返回最相关url列表的标记列表组成的搜索。下面,我的第一个解决方案是为第一个标记指定值1,第二个值为2,依此类推,剩下的工作由python list sort函数完成。2个问题:
1)有没有更优雅/高效的方法来做这件事(让我难堪!) 2) 在上述问题的输入下,是否有其他一般的方法来进行相关性排序?
非常感谢。
# Given a list of saved urls each with a corresponding user-generated taglist
# (ordered by relevance), the user enters a "search" list-of-tags, and is
# returned a sorted list of urls.
# Generate sample "content" linked-list-dictionary. The rationale is to
# be able to add things like 'title' etc at later stages and to
# treat each url/note as in independent entity. But a single dictionary
# approach like "note['url1']=['b','a','c','d']" might work better?
content = []
note = {'url':'url1', 'taglist':['b','a','c','d']}
content.append(note)
note = {'url':'url2', 'taglist':['c','a','b','d']}
content.append(note)
note = {'url':'url3', 'taglist':['a','b','c','d']}
content.append(note)
note = {'url':'url4', 'taglist':['a','b','d','c']}
content.append(note)
note = {'url':'url5', 'taglist':['d','a','c','b']}
content.append(note)
# An example search term of tags, ordered by importance
# I'm using a dictionary with an ordinal number system
# This seems clumsy
search = {'d':1,'a':2,'b':3}
# Create a tagCloud with one entry for each tag that occurs
tagCloud = []
for note in content:
for tag in note['taglist']:
if tagCloud.count(tag) == 0:
tagCloud.append(tag)
# Create a dictionary that associates an integer value denoting
# relevance (1 is most relevant etc) for each existing tag
d={}
for tag in tagCloud:
try:
d[tag]=search[tag]
except KeyError:
d[tag]=100
# Create a [[relevance, tag],[],[],...] result list & sort
result=[]
for note in content:
resultNote=[]
for tag in note['taglist']:
resultNote.append([d[tag],tag])
resultNote.append(note['url'])
result.append(resultNote)
result.sort()
# Remove the relevance values & recreate a list containing
# the url string followed by corresponding tags.
# Its so hacky i've forgotten how it works!
# It's mostly for display, but suggestions on "best-practice"
# intermediate-form data storage?
finalResult=[]
for note in result:
temp=[]
temp.append(note.pop())
for tag in note:
temp.append(tag[1])
finalResult.append(temp)
print "Content: ", content
print "Search: ", search
print "Final Result: ", finalResult
当然可以。基本思想是:不要再试图告诉Python该做什么,只需要向它请求你想要的。在
我建议你也给每个标签一个权重,这取决于它的稀有程度(例如,“狼蛛”标签比“自然”标签更重)。对于一个给定的URL,与其他URL相同的稀有标记应该具有更强的相关性,而存在于另一个URL中的给定URL的常用标记应该标记相关性。在
很容易将我上面描述的规则转换为每个其他URL的数值相关性计算。在
¹除非你所有的网址都与“狼蛛”有关,否则当然:)
相关问题 更多 >
编程相关推荐