Скажем, у меня есть следующие модели:
class NamedEntity(models.Model):
name = models.CharField(max_length=100)
NE_CHOICES = (
('PER', 'Person'),
('TTL', 'Title / Role'),
('ORG', 'Organization'),
('LOC', 'Location')
)
ne_type = models.CharField(max_length=30, choices=NE_CHOICES)
class Document(models.Model):
content = models.TextField()
entities = models.ManyToManyField(NamedEntity)
def find_entities(self):
## First locate user entities
## Locate general Named Entities
print "Finding entities..."
И скажем, в базе данных есть около тысячи именованных объектов.Как лучше всего индексировать / искать в поле содержимого документа, чтобы найти все возможные экземпляры всего списка именованных объектов в качестве метода модели документа?
Пример данных:
Поле Document.content может содержать следующую строку:
"Hey Joe,
I wanted to see if you and Cassy might be interested in going to Franky's on friday night.
-Fred"
Полная таблица NamedEntities будет содержать записи поля .name, например:
"Mark"
"Peter"
"Franky's"
"Seattle"
"Fred"
"Amber"
"Joe"
...assuming a couple thousand entries.
Я хочунайдите все возможные экземпляры этих значений NamedEntity.name в поле Document.content.С точки зрения того, как я хочу, чтобы результат выглядел, я был бы согласен с теговой версией исходной строки:
"Hey \(NE/01254)Joe,
I wanted to see if you and \(NE/01942)Cassy might be interested in going to \(NE/02223)Franky's on friday night.
-\(NE/023432)Fred"
или словарем строковых индексов:
{ 01254 : (4,6),
01942 : (33, 37),
02223 : ... }