goirs

package module
v0.0.0-...-32076fc Latest Latest
Warning

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

Go to latest
Published: Mar 15, 2018 License: GPL-3.0 Imports: 20 Imported by: 0

README

GoIRS

Information Retrieval System written in Go

About this project

This project was written for a course of Information Retrieval Systems at university. After a few months, I decided to release it as an open source project.

About the software

GoIRS is a library, but it has some test programs (goirs-* directories). They were only intended to work with the Corpus we were provided, but the library should work with any text file (except some parts that work only with spanish-written texts, as are the stopper and the stemmer). All of this may be solved eventually.

Special thanks to snowball stemmer library creator (saved me a lot of work).

TODO list

  • Translate comments (at the moment in spanish).
  • Allow other programmers to write their own filter functions and attach them. (Provide an interface)
  • Create an easy way to add process new documents (maybe feed them to a channel).

Documentation

Index

Constants

View Source
const (
	//BUFFERSIZE es el tamaño del buffer de los canales
	BUFFERSIZE = 16
)

Variables

This section is empty.

Functions

func CleanToken

func CleanToken(oldToken string) string

CleanToken elimina caracteres extraños de un token y normaliza los acentos

func Extract

func Extract(query Query, docID int, config *Configuration, index *FrequencyIndex) (string, error)

Extract extrae de un documento una frase donde aparezca algún término de la consulta

func Filter

func Filter(input io.Reader, output io.Writer) error

Filter filtra el HTML de un documento proporcionado por input

func FilterFile

func FilterFile(input string) io.Reader

FilterFile abre el archivo especificado y lo filtra

func Title

func Title(doc string, config *Configuration) (string, error)

Title devuelve el título de un documento ya procesado

Types

type Configuration

type Configuration struct {
	Corpus       string
	Filtered     string
	Tokenized    string
	Stopped      string
	StopperFile  string
	Stemmed      string
	IndexFile    string
	QueryFile    string
	EvalFile     string
	Context      int
	MaxDocuments int

	//Peso necesario para considerar un documento relevante al calcular el peso okapi
	Okapi struct {
		Threshold float64
		K1        float64
		K3        float64
		B         float64
	}
}

Configuration es la estructura en la que guardamos la configuración

func LoadConfiguration

func LoadConfiguration(file string) (*Configuration, error)

LoadConfiguration carga un archivo de configuración

func (*Configuration) Save

func (cfg *Configuration) Save(file string) error

Save guarda la configuración en un archivo

type DocumentWeight

type DocumentWeight struct {
	DocID  int
	Weight float64
}

DocumentWeight representa el valor de similitud de un documento con una consulta

type DocumentWeights

type DocumentWeights []DocumentWeight

DocumentWeights representa una lista de similitudes

func (DocumentWeights) GetCi

func (k DocumentWeights) GetCi(ind *FrequencyIndex, thres float64, token int) float64

GetCi devuelve el peso Robertson-Sparck Jones de un término dada una consulta

func (DocumentWeights) Len

func (d DocumentWeights) Len() int

func (DocumentWeights) Less

func (d DocumentWeights) Less(i, j int) bool

func (DocumentWeights) Swap

func (d DocumentWeights) Swap(i, j int)

type FrequencyIndex

type FrequencyIndex struct {
	//TokenIds guarda el ID de cada token (en forma de string)
	TokenIds map[string]int

	//DocIds guarda el ID de cada documento
	DocIds map[string]int

	TokenNames map[int]string
	DocNames   map[int]string
	//NextToken guarda el siguiente número de token que se va a utilizar
	NextToken int

	//NextDoc guarda el siguiente número de documento
	NextDoc int

	//TokensCount es el índice invertido:
	//tokens[token][documento] = veces que aparece token en "documento"
	//En la segunda vuelta esto se divide entre el número máximo de tokens de cada documento
	//En caso de que no esté, siempre se devolverá 0
	//Guardamos esta estructura en caso de que aparezcan nuevos documentos
	//en la colección, para no tener que reconstruirlo todo desde cero.
	TokensCount map[int]map[int]float64

	//Número de veces que aparece el token que más veces aparece en un documento
	MaxTokensDoc map[int]int

	//IDF
	Idfi map[int]float64

	//Pesos
	Weight map[int]map[int]float64

	DocLength map[int]int
	AvgLength float64
	// contains filtered or unexported fields
}

FrequencyIndex es donde se almacenan todos los datos relativos al índice de frecuencias

func DeserializeFrequencyIndex

func DeserializeFrequencyIndex(file string) *FrequencyIndex

DeserializeFrequencyIndex carga un índice de frecuencias desde un fichero

func NewFrequencyIndex

func NewFrequencyIndex() *FrequencyIndex

NewFrequencyIndex es el constructor del índice de frecuencias

func (*FrequencyIndex) AddAndCountToken

func (ind *FrequencyIndex) AddAndCountToken(doc, token string)

AddAndCountToken añade el token (si no está) y lo cuenta al documento especificado

func (*FrequencyIndex) AddDocument

func (ind *FrequencyIndex) AddDocument(doc string) int

AddDocument añade (parcialmente) un documento al índice de frecuencias. El cómputo de tokens y demás debe realizarse por separado

func (*FrequencyIndex) AddDocumentWithId

func (ind *FrequencyIndex) AddDocumentWithId(doc string, id int)

AddDocumentWithId añade un documento al índice de frecuencias con el ID dado El cómputo de tokens y demás debe realizarse por separado

func (*FrequencyIndex) AddToken

func (ind *FrequencyIndex) AddToken(token string) int

AddToken añade un token al índice de frecuencias

func (*FrequencyIndex) AddTokenWithId

func (ind *FrequencyIndex) AddTokenWithId(token string, id int)

func (*FrequencyIndex) ComputeAll

func (ind *FrequencyIndex) ComputeAll() *FrequencyIndex

ComputeAll hace los siguientes cálculos: - Tf normalizado (contando la frecuencia máxima de un documento) - Idf de cada token - Peso normalizado

func (*FrequencyIndex) ComputeAverageDocumentLength

func (ind *FrequencyIndex) ComputeAverageDocumentLength() *FrequencyIndex

ComputeAverageDocumentLength calcula la longitud media de los documentos

func (*FrequencyIndex) ComputeIdf

func (ind *FrequencyIndex) ComputeIdf() *FrequencyIndex

ComputeIdf calcula el IDF de cada token

func (*FrequencyIndex) ComputeMaxTokensDoc

func (ind *FrequencyIndex) ComputeMaxTokensDoc() *FrequencyIndex

ComputeMaxTokensDoc calcula el campo de la estructura del mismo nombre.

func (*FrequencyIndex) ComputeSimilarityMatrix

func (ind *FrequencyIndex) ComputeSimilarityMatrix() SimilarityMatrix

ComputeSimilarityMatrix computes a matrix which tells for each document pair how many tokens unique tokens do they have in common. It is supposed to be a triangular matrix, but values are repeated for the percentage computation.

func (*FrequencyIndex) ComputeWeights

func (ind *FrequencyIndex) ComputeWeights() *FrequencyIndex

ComputeWeights calcula el TF*IDF

func (*FrequencyIndex) CountToken

func (ind *FrequencyIndex) CountToken(idDoc, idToken int)

CountToken cuenta un token en el documento indicado

func (*FrequencyIndex) MarshalXML

func (ind *FrequencyIndex) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML Exports FrequencyIndex to XML

func (*FrequencyIndex) NormalizeTf

func (ind *FrequencyIndex) NormalizeTf() *FrequencyIndex

NormalizeTf divide los TF entre los MaxTokensDoc

func (*FrequencyIndex) NormalizeWeights

func (ind *FrequencyIndex) NormalizeWeights() *FrequencyIndex

NormalizeWeights normaliza los pesos

func (*FrequencyIndex) Serialize

func (ind *FrequencyIndex) Serialize(file string)

Serialize serializa el índice de frecuencias a un archivo

func (*FrequencyIndex) SerializeXML

func (ind *FrequencyIndex) SerializeXML(file string)

SerializeXML exports the FrequencyIndex to a XML file

type Query

type Query map[int]float64

Query representa una consulta en forma de "vector"

type QueryResult

type QueryResult map[int]float64

QueryResult es el resultado de realizar una consulta

func GetOkapiWeight

func GetOkapiWeight(q Query, ind *FrequencyIndex, thres float64, k1 float64, k3 float64, b float64) QueryResult

GetOkapiWeight devuelve el peso Okapi BM25 para la consulta dada

func GetQuerySimilarities

func GetQuerySimilarities(q Query, ind *FrequencyIndex) QueryResult

GetQuerySimilarities calcula el valor de similitud para todos los documentos indexados en ind con respecto a la consulta q

func (QueryResult) GetNGreatest

func (qr QueryResult) GetNGreatest() DocumentWeights

GetNGreatest elige los N mejores resultados de una consulta. Utiliza el sort de todos los valores (ineficiente)

type SimilarityMatrix

type SimilarityMatrix struct {
	Matrix    map[int]map[int]float64
	Index     *FrequencyIndex
	DocLength int
}

SimilarityMatrix is a matrix generated by ComputeSimilarityMatrix. As it is triangular, the lower index must be the first

func (SimilarityMatrix) MarshalXML

func (sm SimilarityMatrix) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML exports the matrix to XML

func (SimilarityMatrix) Percentage

func (sm SimilarityMatrix) Percentage()

Percentage normalizes the similarity matrix. Divides each row by the length of the document

func (SimilarityMatrix) Serialize

func (sm SimilarityMatrix) Serialize(file string)

Serialize exports a SimilarityMatrix to a file

type Stopper

type Stopper map[string]bool

Stopper ...

func ReadStopper

func ReadStopper(input io.Reader) Stopper

ReadStopper carga un stopper desde una entrada

func (Stopper) WriteStopper

func (stopper Stopper) WriteStopper(output io.Writer)

WriteStopper guarda el stopper (ya normalizado)

type StringIterator

type StringIterator <-chan string

StringIterator es un iterador genérico de cadenas

func ReadLines

func ReadLines(inputStream io.Reader) StringIterator

ReadLines reads lines from a file and returns a StringIterator

func TokenizerIterator

func TokenizerIterator(input io.Reader) StringIterator

TokenizerIterator devuelve un canal que suelta tokens...

func TokenizerWriterIterator

func TokenizerWriterIterator(input io.Reader, file string, write bool) StringIterator

TokenizerWriterIterator Igual que TokenizerIterator, pero que escribe los tokens en el fichero especificado si write es true

func (StringIterator) AddToFrequencyIndex

func (tokens StringIterator) AddToFrequencyIndex(doindex bool, document string, index *FrequencyIndex) *FrequencyIndex

AddToFrequencyIndex es el iterador de alto nivel, preparado para el main

func (StringIterator) Evaluate

func (i StringIterator) Evaluate()

Evaluate cierra la cadena y evalua todo lo del iterador Básicamente, lo saca todo para forzar las operaciones intermedias

func (StringIterator) Filter

func (i StringIterator) Filter(f func(string) bool) StringIterator

Filter filtra el contenido del iterador dependiendo de la función f

func (StringIterator) IterateFrequencyIndex

func (tokens StringIterator) IterateFrequencyIndex(document string, index *FrequencyIndex) *FrequencyIndex

IterateFrequencyIndex itera sobre un canal de tokens, añadiéndolos al índice de frecuencias en el documento especificado. En este caso, el canal de tokens representa un documento

func (StringIterator) Next

func (i StringIterator) Next() string

Next devuelve el siguiente valor o la cadena vacía en caso de llegar al final

func (StringIterator) StemmerIterator

func (tokens StringIterator) StemmerIterator() StringIterator

StemmerIterator recorre el iterador y devuelve

func (StringIterator) StemmerWriterIterator

func (tokens StringIterator) StemmerWriterIterator(dostem bool, file string, writeStem bool) StringIterator

StemmerWriterIterator escribe los tokens pasados por el stemmer

func (StringIterator) StopperIterator

func (tokens StringIterator) StopperIterator(stop Stopper) StringIterator

StopperIterator devuelve aquellos tokens que no están en el stopper

func (StringIterator) StopperWriterIterator

func (tokens StringIterator) StopperWriterIterator(dostop bool, file string, writeStop bool, stop Stopper) StringIterator

StopperWriterIterator igual que StopperIterator, pero escribe los cambios y se ejecuta opcionalmente

func (StringIterator) ToQuery

func (tokens StringIterator) ToQuery(ind *FrequencyIndex) Query

ToQuery transforma un iterador de cadenas en el formato requerido para una consulta

type Topic

type Topic struct {
	XMLName xml.Name `xml:"topic"`
	ID      int      `xml:"id"`
	Desc    string   `xml:"desc"`
}

Topic representa una consulta en el XML

type Topics

type Topics struct {
	XMLName xml.Name `xml:"topics"`
	Topics  []Topic  `xml:",any"`
}

Topics representa el conjunto de consultas del XML

func ReadXMLQueries

func ReadXMLQueries(config *Configuration) Topics

ReadXMLQueries lee las consultas de un fichero XML

Jump to

Keyboard shortcuts

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