【问题标题】:Filter object by common words in title按标题中的常用词过滤对象
【发布时间】:2021-07-06 17:23:43
【问题描述】:

我尝试通过获取当前对象的标题来获取相关对象,并过滤两个标题之间的常用词,我可以做出一些东西,但它并不准确

我得到标题并使用.split() 拆分它并使用Q 按第一个和第二个单词进行过滤,但这不准确

.我想做的事

我想通过获取当前对象标题和结果标题之间的常用词来获得结果

def get_queryset(self):
book_pk = self.kwargs['pk']
book = Video.objects.get(pk=book_pk)
lst = book.title
split = lst.split()

return Book.objects.filter(Q(title__icontains=split[0]) & Q(title__icontains=split[1]))

【问题讨论】:

  • 请提供您想要实现的示例输入和输出
  • 例如,我有标题为 avangers team with spiderman 的当前对象,并且想要所有包含 ['avangers ', 'spiderman'] common words 的建议对象标题
  • 有许多 string similarity 算法可能对您有用。
  • @Ahmed,对于avangers team with spiderman,您是否还想要只有avangers 或只有team 常用词的对象?
  • @daniherrera 是的 avangers ,我的想法是获取书籍中最常见的 2 个单词,并根据这些常见单词展示书籍

标签: python django django-models django-views


【解决方案1】:

根据Gareth 回答Q constructor

from django.db.models import Q

def get_queryset(self):
    book_pk = self.kwargs['pk']
    book = Video.objects.get(pk=book_pk)
    title = book.title # For ex, 'Harry Potter'
    title_list = title.split() # make a list ['Harry', 'Potter']

    q = Q()
    for each_title in title_list:
        q |= Q(title__icontains = each_title) # | or is used to either harry or potter

    
    return Book.objects.filter(q)

上面的for循环查询简化为:

Book.objects.filter(Q(title__icontains = 'Harry') | Q(title__icontains = 'Potter'))

这意味着如果标题包含“Harry”或“Potter”或“ANY-OTHER-KEYWORDS”,则过滤 Book 对象。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2014-07-25
    • 2019-01-04
    • 2022-01-18
    • 2018-04-03
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多