Нека изградим Unigram и Positional Postings в Python от нулата върху набор от данни от реалния свят.

Това е втората публикация от поредицата за извличане на информация.

„Щракнете тук“, за да проверите git repo

Серия за извличане на информация:

Съдържание:

  • Генерирайте Unigram Inverted Index и изпълнявайте сложни булеви заявки
  • Генерирайте позиционни индекси и търсете фрази.

Въведение

Горните два метода са основни техники за извличане на документи (текстови файлове), при които се опитваме да извлечем документите, като даваме някакъв вид заявка.

За да извлечем данните по подходящ начин, първо трябва да ги индексираме.

Матрица на разпространение на срочен документ:

При този метод ние събираме всички уникални думи и формираме матрица от уникални думи и документи. Маркирайте 1 в клетката, в която съществува дума в съответния документ.

проблем:

  • Изключително разредена матрица
  • Матрица с много голям размер, когато се съхранява на диск

Използвани инструменти:

  • NLTK
  • панди
  • NumPy
  • туршия

Използвана предварителна обработка:

  • Премахване на стоп думи
  • Премахване на препинателни знаци
  • Преобразуване в малки букви
  • Протичане
  • Преобразуване на числата в техните еквивалентни думи
  • Премахване на заглавката

Обърнат индекс на Unigram:

За да преодолеем проблемите на документирането на термините, ние използваме техника, наречена униграмен обърнат индекс.

при тази техника съхраняваме целия списък с документи, които съдържат дума. Колекцията от тези списъци за всяка дума се нарича списък с публикации.

Думите, които използваме тук, се наричат ​​речник. И всеки от списъка с документи за дума се нарича осчетоводяване.

стъпки:

  • Използвайте идентификатор на документ за всички документи (обикновено индекс по време на итерация)
  • Предварително обработете текста
  • Генерирайте токени
  • За всеки токен в документа добавете идентификатор на документа.
  • Повторете това за всеки документ.
  • Ако срещаният токен е нов токен, който не е в речника, добавете токена към речника.
  • Идентификаторите на документи трябва да бъдат сортирани за лесно извличане (но зависи от изпълнението)
  • Също така следете броя на документите, от които се състои всяка дума (ще се използва за интелигентно извличане на булева заявка)
  • Боравете с грешни/несъществуващи токени

Извличане на сложна заявка:

  • Разделете командите и токените
  • Предварително обработете токените
  • Първо внедрете командата not на съответните думи и заменете списъка с токени със списъка с публикации на тази конкретна дума
  • След това отляво надясно приложете командите „и“ „или“.
  • Върнете окончателните сливания

Позиционно индексиране:

Позиционното индексиране е почти подобно на обърнатото индексиране на Unigram, при позиционното индексиране ние допълнително запазваме позицията на всички срещания на токена, свързани с ID на документа

Това помага за по-добро търсене на заявки без булево търсене.

Една важна разлика е, че тук няма да премахнем стоп думите.

стъпки:

  • Използвайте идентификатор на документ за всеки документ (обикновено индексиран по време на итерация)
  • Предварително обработете текста
  • Генерирайте токени
  • За всеки токен в документа добавете двойка (идентификатор на документа, идентификатор на позиция).
  • Повторете това за всеки документ.
  • Ако срещаният токен е нов токен, който не е в речника, добавете токена към речника.
  • Идентификаторите на документи трябва да бъдат сортирани за лесно извличане (но зависи от изпълнението)
  • Също така следете броя на документите, от които се състои всяка дума (ще се използва за интелигентно извличане на булева заявка)
  • Боравете с грешни/несъществуващи токени

Извличане на заявка:

  • Вземете низа на заявката
  • Предварително обработете цялата заявка
  • Преобразуване в токени
  • Вземете двойката (документ, позиция) за първия жетон
  • за всяка двойка:
  • за всички следващи токени
  • съответства, ако следващият токен съществува в (документ на позиция++)
  • ако следващият токен не съществува, просто прекъснете цикъла

Наблюдения:

  • Обърнатият индекс на Unigram е по-бърз за изграждане, но не е много полезен поради изискването за булеви заявки
  • Позиционното индексиране е полезно за търсене на фрази, но не отнема много време за изграждане.
  • Памет: Униграма ‹ Позиционна
  • Скорост на изграждане: Униграма › Позиционна
  • Скорост на заявката: Unigram › Позиционна

Предположения:

  • Заглавието не съдържа нищо важно
  • И не е необходимо да се премахва долен колонтитул

Статистика:

„Щракнете тук“, за да проверите git repo

Серия за извличане на информация: