Как узнать, есть ли большой список ключевых слов в Django TextField? - PullRequest
2 голосов
/ 04 июля 2011

Скажем, у меня есть следующие модели:

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 : ... } 

1 Ответ

0 голосов
/ 07 июля 2011

Исходя из моего понимания, мои мысли таковы:

  • Получить данные из поля содержимого
  • Разделите данные на разные слова, которые должны дать вам и массив слов.
  • Любая группа похожих слов - можно использовать словарь: {'mary': 5, 'mark': count}
  • Или удалить повторяющиеся слова, используя структуру данных списка python
  • Возможно, вы можете удалить слова, которые, как вы уверены, не являются допустимыми именами
  • Поиск, чтобы увидеть, есть ли какие-либо слова в базе данных

Полагаю, вы рассматривали возможность индексирования поля NamedEntity.name.

Если список слов небольшой, то оператор or кажется лучшей идеей для поиска имен в базе данных. Однако я не уверен, насколько хороши заявления. Более того, я понятия не имею, насколько большим может быть это поле контента.

Если TextField содержит больше уникальных слов, чем база данных, это, вероятно, не лучший способ.

Надеюсь, мое понимание было правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...