Автоматическая обработка текста

Post on 06-Jan-2016

85 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Автоматическая обработка текста. Представление текстового массива. Способы и форматы представления Индекс Базы данных. Полнотекстовый поиск. В этой функции языка C текст строки big просматривают слева направо и для каждой позиции x запускают последовательное сравнение с искомой - PowerPoint PPT Presentation

TRANSCRIPT

Автоматическая Автоматическая обработка текстаобработка текста

Представление Представление текстового массиватекстового массива

Способы и форматы Способы и форматы представленияпредставления

ИндексИндекс Базы данныхБазы данных

Полнотекстовый поискПолнотекстовый поискchar* strstr(char *big, char *little)char* strstr(char *big, char *little)

{{

char *x, *y, *z;char *x, *y, *z;

for (x = big; *x; x++)for (x = big; *x; x++)

{{

for (y = little, z = x; *y;for (y = little, z = x; *y;

++y, ++z)++y, ++z)

{{

if (*y != *z)if (*y != *z)

break;break;

}}

if (!*y)if (!*y)

return x;return x;

}}

return 0;return 0;

}}

В этой функции языка Cтекст строки bigпросматривают слеванаправо и для каждойпозиции x запускаютпоследовательноесравнение с искомойподстрокой little. Дляэтого, двигаяодновременно двауказателя y и z,попарно сравнивают всесимволы. Если мыуспешно дошли до концаискомой подстроки,значит она найдена.

Полнотекстовый поискПолнотекстовый поиск НайтиНайти:: «дом» «дом»

?????? Как найти Как найти дома, доме, домом дома, доме, домом и и т.п.т.п.??

форму «дом» или часть слова, форму «дом» или часть слова, совпадающего с последовательностью совпадающего с последовательностью букв «дом» - букв «дом» - наронародомдом

Программа ищет ту подстроку, которую Программа ищет ту подстроку, которую мы ей зададим (точное совпадение)мы ей зададим (точное совпадение)

Можно загрузить текст в Word искать там: Правка: найти Что найдем?

Можно использовать специальный язык «дом.*» Что найдем? Дома, доме и т.п. + домашний, домовой, Дома, доме и т.п. + домашний, домовой,

домолоть …домолоть …

Индекс. Индекс. Полнотекстовый поискПолнотекстовый поиск

Хотя прямой просмотр всех текстов – довольно Хотя прямой просмотр всех текстов – довольно медленное занятие, не следует думать, что медленное занятие, не следует думать, что алгоритмы прямого поиска не применяются в алгоритмы прямого поиска не применяются в интернете. Норвежская поисковая система Fast интернете. Норвежская поисковая система Fast (www.fastsearch.com) использовала чип, (www.fastsearch.com) использовала чип, реализующий логику прямого поиска реализующий логику прямого поиска упрощенных регулярных выражений [fastpmc], и упрощенных регулярных выражений [fastpmc], и разместила 256 таких чипов на одной плате. Это разместила 256 таких чипов на одной плате. Это позволяло Fast-у обслуживать довольно большое позволяло Fast-у обслуживать довольно большое количество запросов в единицу времени. (И. количество запросов в единицу времени. (И. Сегалович)Сегалович)

«Загадки» «Загадки» ((““backtrackingbacktracking””))

Поиск в корпусах Лидса:Поиск в корпусах Лидса: Как найти: «Пока!»Как найти: «Пока!»

Поиск в Поиск в COCACOCA Найти все формы глагола «Найти все формы глагола «telltell»»

Поиск в НКРЯ:Поиск в НКРЯ: Как найти слова, начинающиеся на Как найти слова, начинающиеся на

пере- и заканчивающиеся на –пере- и заканчивающиеся на –выватьсявываться

ПОЧЕМУ ТАКПОЧЕМУ ТАК??

Что после токенаЧто после токена??

Как представлять аннотацииКак представлять аннотации?? Как хранить аннотацииКак хранить аннотации?? Как обеспечить навигацию по Как обеспечить навигацию по

корпусу (аннотациям)корпусу (аннотациям)

«Упаковка» корпуса. «Упаковка» корпуса. XML XML разметкаразметка

<sent_text></sent_text> <tree> <token> <lexem <sent_text></sent_text> <tree> <token> <lexem lex_text="lex_text="Он" Он" ID="1" father="3" link="ID="1" father="3" link="от сказуемого к от сказуемого к подлежащему, Гл. – местоим.-сущ." подлежащему, Гл. – местоим.-сущ." lemma="lemma="он" он" grval="Pron, grval="Pron, PronounPersonal, Sg, Masc, Nom" ></lexem> </token> PronounPersonal, Sg, Masc, Nom" ></lexem> </token> <token> <lexem lex_text="<token> <lexem lex_text="так" так" ID="2" father="3" ID="2" father="3" link="link="примыкание, Гл. - наречие" примыкание, Гл. - наречие" lemma="lemma="так" так" grval="Adv, grval="Adv, NotOAdverb" ></lexem> </token> <token> <lexem NotOAdverb" ></lexem> </token> <token> <lexem lex_text="lex_text="любит" любит" ID="3" father="-1" link="ID="3" father="-1" link="связь от корня" связь от корня" lemma="lemma="любить" любить" grval="Verb, Finit, Praes, _3rd, Sg, Trans, grval="Verb, Finit, Praes, _3rd, Sg, Trans, Imperfect, GenC_No, DatC_No, AccC_AnyAnym, InstrC_NAnim, Imperfect, GenC_No, DatC_No, AccC_AnyAnym, InstrC_NAnim, LocC_No, Unreflexive" ></lexem> </token> <token> LocC_No, Unreflexive" ></lexem> </token> <token> <lexem lex_text=" <lexem lex_text="эту" эту" ID="4" father="5" link="ID="4" father="5" link="согласование, Сущ. согласование, Сущ. - атрибут. ч. р." - атрибут. ч. р." lemma="lemma="этот" этот" grval="Pron, PronAdj, Sg, Fem, Acc" grval="Pron, PronAdj, Sg, Fem, Acc" ></lexem> </token> <token> <lexem ></lexem> </token> <token> <lexem lex_text="lex_text="квартиру" квартиру" ID="5" father="3" link="ID="5" father="3" link="управление, Гл. - управление, Гл. - сущ." сущ." lemma="lemma="квартира" квартира" grval="Noun, Nanim, Nverbal, Fem, Acc, grval="Noun, Nanim, Nverbal, Fem, Acc, Sg" ></lexem> </token> </tree> </S>Sg" ></lexem> </token> </tree> </S>

«Упаковка» корпуса. «Упаковка» корпуса. РазметкаРазметка

------line1------------line1------ 1 1 Он Он synt_tag=<subj> gov_by=<3> antec=<>synt_tag=<subj> gov_by=<3> antec=<> 2 2 так так synt_tag=<spec> gov_by=<3> antec=<>synt_tag=<spec> gov_by=<3> antec=<> 3 3 любит любит synt_tag=<pred> gov_by=<> antec=<>synt_tag=<pred> gov_by=<> antec=<> 4 4 эту эту synt_tag=<amod> gov_by=<5> antec=<>synt_tag=<amod> gov_by=<5> antec=<> 5 5 квартиру. квартиру. synt_tag=<obj> gov_by=<3> antec=<>synt_tag=<obj> gov_by=<3> antec=<>

------line2------------line2------ 1 1 Судьба Судьба synt_tag=<subj> gov_by=<2> antec=<>synt_tag=<subj> gov_by=<2> antec=<> 2 2 дала дала synt_tag=<pred> gov_by=<> antec=<>synt_tag=<pred> gov_by=<> antec=<> 3 3 мне мне synt_tag=<comp> gov_by=<2> antec=<>synt_tag=<comp> gov_by=<2> antec=<> 4 4 эту эту synt_tag=<amod> gov_by=<5> antec=<>synt_tag=<amod> gov_by=<5> antec=<> 5 5 возможность. возможность. synt_tag=<obj> gov_by=<2> antec=<>synt_tag=<obj> gov_by=<2> antec=<>

Индекс. Индекс. Инвертированный файлИнвертированный файлЭта простейшая структура данных.Эта простейшая структура данных.

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

Первая категория людей знает, что это такое, по Первая категория людей знает, что это такое, по «конкордансам» - алфавитно упорядоченным «конкордансам» - алфавитно упорядоченным исчерпывающим спискам слов из одного текста или исчерпывающим спискам слов из одного текста или принадлежащих одному автору (например «Конкорданс принадлежащих одному автору (например «Конкорданс к стихам А. С. Пушкина», «Словарь-конкорданс к стихам А. С. Пушкина», «Словарь-конкорданс публицистики Ф. М. Достоевского»). публицистики Ф. М. Достоевского»).

Вторые имеют дело с той или иной формой Вторые имеют дело с той или иной формой инвертированного списка всякий раз, когда строят или инвертированного списка всякий раз, когда строят или используют «индекс БД по ключевому полю».используют «индекс БД по ключевому полю».

%% word%% word tagtag morphmorph edgeedge parentparent secedge commentsecedge comment

#BOS 1 1 985275570 1#BOS 1 1 985275570 1 MMццgengen VMFINVMFIN 3.Pl.Pres.Konj3.Pl.Pres.KonjHDHD 508508 PuristenPuristen NNNN Masc.Nom.Pl.*Masc.Nom.Pl.* NKNK 505505 alleraller PIDATPIDAT *.Gen.Pl*.Gen.Pl NKNK 500500 MusikbereicheMusikbereiche NNNN Masc.Gen.Pl.*Masc.Gen.Pl.*NKNK 500500 auchauch ADVADV ---- MOMO 508508 diedie ARTART Def.Fem.Akk.SgDef.Fem.Akk.Sg NKNK 501501 NaseNase NNNN Fem.Akk.Sg.*Fem.Akk.Sg.* NKNK 501501 rrььmpfenmpfen VVINFVVINF ---- HDHD 506506 ,, $,$, ---- ---- 00 #500#500 NPNP ---- GRGR 505505 #501#501 NPNP ---- OAOA 506506

#EOS 1#EOS 1

Полнотекстовый поиск Полнотекстовый поиск vs. ???vs. ???

Как устроена навигация по Как устроена навигация по книгамкнигам??

индексиндекс

ИндексИндекс

Индекс. Немного об Индекс. Немного об информационном информационном

поискепоиске Which plays of Shakespeare contain the Which plays of Shakespeare contain the

words words BBRUTUS ANDRUTUS AND CCAESARAESAR, but not , but not CCALPURNIAALPURNIA?? One could grep all of Shakespeare’s plays for One could grep all of Shakespeare’s plays for

BBRUTUSRUTUS and and CCAESARAESAR, then strip out lines , then strip out lines containing containing CALPURNIA CALPURNIA

Why is grep not the solution?Why is grep not the solution? Slow (for large collections)Slow (for large collections) grep is line-oriented, IR is document-orientedgrep is line-oriented, IR is document-oriented ““NOTNOT C CALPURNIAALPURNIA” is non-trivial” is non-trivial Other operations (e.g., find the word Other operations (e.g., find the word RROMANSOMANS near near

COUNTRYMANCOUNTRYMAN ) not feasible) not feasible

Индекс. Немного об Индекс. Немного об информационном информационном

поискепоиске

Entry is 1 if term occurs. Example: CALPURNIA occurs in Julius Caesar. Entry is 0 if term doesn’t occur. Example: CALPURNIAdoesn’t occur in The tempest.

16

Incidence vectors

So we have a 0/1 vector for each term.

To answer the query BRUTUS AND CAESAR AND NOT CALPURNIA:

Take the vectors for BRUTUS, CAESAR AND NOT CALPURNIA

Complement the vector of CALPURNIA

Do a (bitwise) and on the three vectors110100 AND 110111 AND 101111 = 100100

16

17

0/1 vector for BRUTUS

17

Anthony and Cleopatra

Julius Caesar

The Tempest

Hamlet

Othello Macbeth . . .

ANTHONYBRUTUS CAESARCALPURNIACLEOPATRAMERCYWORSER. . .

1110111

1111000

0000011

0110011

0010011

1010010

result: 1 0 0 1 0 0

18

Can’t build the incidence matrix

M = 500,000 × 106 = half a trillion 0s and 1s.But the matrix has no more than one billion 1s.

Matrix is extremely sparse.What is a better representations?

We only record the 1s.

18

19

Inverted Index

For each term t, we store a list of all documents that contain t.

19

dictionary postings

20

Inverted Index

For each term t, we store a list of all documents that contain t.

20

dictionary postings

Inverted index Inverted index constructionconstruction

❶ Collect the documents to be indexed:

❷ Tokenize the text, turning each document into a list of tokens:

❸ Do linguistic preprocessing, producing a list of normalized tokens, which are the indexing terms:

❹ Index the documents that each term occurs in by creating aninverted index, consisting of a dictionary and postings.

21

22

Generate posting

22

23

Sort postings

23

24

Create postings lists, determine document frequency

24

25

Split the result into dictionary and postings file

25

dictionary postings

26

Later in this course

Index construction: how can we create inverted indexes for large collections?How much space do we need for dictionary and index?Index compression: how can we efficiently store and process indexes for large collections?Ranked retrieval: what does the inverted index look like when we want the “best” answer?

26

OutlineOutline

❶ Introduction

❷ Inverted index

❸ Processing Boolean queries

❹ Query optimization

27

28

Simple conjunctive query (two terms)

Consider the query: BRUTUS AND CALPURNIATo find all matching documents using inverted index:

❶ Locate BRUTUS in the dictionary❷ Retrieve its postings list from the postings file❸ Locate CALPURNIA in the dictionary❹ Retrieve its postings list from the postings file❺ Intersect the two postings lists❻ Return intersection to user

28

29

Intersecting two posting lists

This is linear in the length of the postings lists.Note: This only works if postings lists are sorted.

29

top related