Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将文本块与多行匹配_Python_Django_Full Text Search - Fatal编程技术网

Python 将文本块与多行匹配

Python 将文本块与多行匹配,python,django,full-text-search,Python,Django,Full Text Search,尝试构建一种方法,对在Django中找到匹配项的单个行扫描一大块文本 假设我有这篇文章: 我的朋友乔·布洛格斯和彼得·史密斯正在和我一起建造一座沙堡 他们的朋友简·多伊和他们的狗本杰明 我想扫描该文本并将名称与我存储的一组“person”数据相匹配。 这是我的个人模型: class Artist(models.Model): name = models.CharField(max_length=255) slug = models.SlugField(max_length=100

尝试构建一种方法,对在Django中找到匹配项的单个行扫描一大块文本

假设我有这篇文章:

我的朋友乔·布洛格斯和彼得·史密斯正在和我一起建造一座沙堡 他们的朋友简·多伊和他们的狗本杰明

我想扫描该文本并将名称与我存储的一组“person”数据相匹配。 这是我的个人模型:

class Artist(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=100)
    biog = models.CharField(max_length=255)
我想将这组文本与此数据中的项目进行比较

它需要匹配:

乔·布洛格斯

彼得·史密斯

无名氏

本杰明

(名称的长度可以是1-5个单词,但它们都存储在同一行中)

我该怎么办?我需要函数返回它在文本中找到的个人ID列表

尝试了各种各样的方法,比如在每次休息时拆分单词,进行部分匹配,然后查看下面的单词是否相同并继续,但我所做的每件事都感觉笨拙,没有按预期工作


谢谢

假设您的艺术家是一个元组列表,包含他们的id和全名(如果您的艺术家在另一个结构中,您可以轻松转换它)


谢谢,但这有多大的可扩展性?我目前有大约2000人的记录来处理全文搜索总是很昂贵的,但2000人是一个相当小的数字。不过,您可能希望跳过构建元组列表的第一步,直接处理已有的数据结构。
artists = [ (1, 'Joe Bloggs'), (2, 'Peter Smith'), (3, 'Jane Doe'), (4, 'Benjamin') ]
t = 'Joe Bloggs\'s dog is called Benjamin. Peter Fuller and John Doe are two unkown persons.'

def findArtists (artists, text):
    return [aid for aid, name in artists if name in text]

print (findArtists (artists, t) )