search

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2023 License: MIT Imports: 9 Imported by: 0

README

Полнотекстовый поиск для русского языка со стеммингом. Ноль зависимостей и сторонних библиотек.

Инициализация поиска.

s, e := search.New(&search.Configs{
    StopWords: "corpus/stop-words.json",
    Dump:      "search.gob",
})
if e != nil {
    log.Fatal(e)
}

При инициализации поиска необходимо передать конфигурацию, в которой указан путь до корпуса русских стоп-слов и путь до gob файла поиска. Если gob файл создан, поиск загрузит векторы индексов в хеш-таблицу.

Вставка и индексация документа.

s.Insert(1, x)

В данном примере метод Insert принимает первым параметром идентификатор документа и документ вторым параметром. Метод производит очистку текста от спецсимволов и пунктуации, затем приводит в нижний регистр и далее удаляет из текста все стоп-слова. После этого итерация каждого слова делает стемминг и записывает индекс документа в хеш-таблицу.

Поиск.

b, e := s.Find("исследование роторной гидропоники")
if e != nil {
    log.Fatal(e)
}

В качестве единственного аргумента метод принимает поисковой запрос и отдает срез байт сериализованного json массива. Массив ответа содержит идентификатор документа и количество поисковых совпадений в каждом элементе. Следовательно, чем больше число совпадений, тем выше фактор ранжировния.

Полный пример.

package main

import (
    "fmt"
    "log"
    "github.com/michail-vestnik/search"
)

const (
    x = "В современном мире весьма активно начинает развиваться растениеводство без контакта с грунтом. Проведен обзор различных роторных гидропонных систем, существующих и разрабатываемых. Современные образцы ещё нуждаются в систематизации подбора материалов, системных и программных компонентов, из которых они будут собираться, выборе наиболее оптимальных, в зависимости от выращиваемой культуры, габаритов. Для исследования возможностей конструкции, надежности и функционала установки была разработана и собрана модель роторной гидропоники, для изучения технических особенностей выращивания в роторной гидропонике."
    y = "В работе исследованы перспективы развития новой отрасли авиации: полёты на ионном ветре. Представлена экспериментальная схема модели ионолёта, определены особенности его конструкции. Рассмотрено возможное применение устройства в авиационной и космической отраслях."
    z = "Рассмотрены необходимость исследования первоначал сетецентрической войны (далее – СЦВ) и содержание положений научных произведений, косвенно к ним относящихся. Обнаружена элементная составляющая относительно предмета анализа. Результат работы выражен формулировкой понятия «первоначала СЦВ». Оно представлено как её условия существования и причины проведения, которые в своей совокупности / по отдельности способствуют повышению эффективности управления войсками и оружием, предоставлению участникам военных операций объективных сведений о расстановке сил и средств на поле боя в режиме реального времени или затрудняют подобное."
)

func main() {

    s, e := search.New(&search.Configs{
        StopWords: "corpus/stop-words.json",
        Dump:      "search.gob",
    })
    if e != nil {
        log.Fatal(e)
    }
	
    s.Insert(1, x)
    s.Insert(2, y)
    s.Insert(3, z)
	
    b, e := s.Find("исследование роторной гидропоники")
    if e != nil {
        log.Fatal(e)
    }
	
    e = s.Save()
    if e != nil {
        log.Fatal(e)
    }
	
    fmt.Printf("b: %v\n", string(b))

}

Спасибо за просмотр.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Configs

type Configs struct {
	StopWords, Dump string
}
type Search struct {
	// contains filtered or unexported fields
}

func New

func New(c *Configs) (*Search, error)

Конструктор нового поиска.

func (*Search) Find

func (s *Search) Find(text string) ([]byte, error)

Метод производит очистку текста от спецсимволов и пунктуации, затем приводит в нижний регистр и далее удаляет из текста все стоп-слова. После этого итерация каждого слова делает стемминг и проверяет наличие слов в хеш-таблице. Если слова совпадают то создаётся срез индексов.

func (*Search) Insert

func (s *Search) Insert(key uint, text string)

Метод производит очистку текста от спецсимволов и пунктуации, затем приводит в нижний регистр и далее удаляет из текста все стоп-слова. После этого итерация каждого слова делает стемминг и записывает индекс документа в хеш-таблицу.

func (*Search) Save

func (s *Search) Save() error

Дамп хеш-таблиц на диск.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL