Python 将文本块与多行匹配
尝试构建一种方法,对在Django中找到匹配项的单个行扫描一大块文本 假设我有这篇文章: 我的朋友乔·布洛格斯和彼得·史密斯正在和我一起建造一座沙堡 他们的朋友简·多伊和他们的狗本杰明 我想扫描该文本并将名称与我存储的一组“person”数据相匹配。 这是我的个人模型: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
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) )