TF-IDF reiškia terminų dažnį Inverse Document Frequency of records. Jis gali būti apibrėžiamas kaip apskaičiavimas, kiek žodis iš serijos ar korpuso yra susijęs su tekstu. Reikšmė didėja proporcingai tam, kiek kartų tekste žodis pasirodo, tačiau ją kompensuoja žodžio dažnis korpuse (duomenų rinkinyje).
Terminai:
- Termino dažnis: dokumente d dažnis reiškia tam tikro žodžio t atvejų skaičių. Todėl matome, kad aktualiau tampa tada, kai tekste atsiranda žodis, kuris yra racionalus. Kadangi terminų eilės tvarka nėra reikšminga, tekstą terminų modelių maišelyje galime apibūdinti naudodami vektorių. Kiekvienam konkrečiam darbo terminui yra įrašas, kurio reikšmė yra termino dažnis.
Termino, kuris pasitaiko dokumente, svoris yra tiesiog proporcingas termino dažnumui.
tf(t,d) = count of t in d / number of words in d>
- Dokumento dažnis: patikrinama teksto, kuris labai panašus į TF, prasmė visame korpuso rinkinyje. Vienintelis skirtumas yra tas, kad dokumente d TF yra termino t dažnio skaitiklis, o df yra įvykių skaičius t termino dokumentų rinkinyje N. Kitaip tariant, dokumentų, kuriuose yra žodis, skaičius yra DF.
df(t) = occurrence of t in documents>
- Atvirkštinis dokumento dažnis: daugiausia tikrinama, ar žodis yra aktualus. Pagrindinis paieškos tikslas yra rasti tinkamus įrašus, kurie atitinka paklausą. Kadangi tf laiko visus terminus vienodai reikšmingais, terminą dažniai galima naudoti ne tik termino svoriui darbe išmatuoti. Pirmiausia suraskite termino t dokumento dažnumą skaičiuodami dokumentų, kuriuose yra terminas, skaičių:
df(t) = N(t) where df(t) = Document frequency of a term t N(t) = Number of documents containing the term t>
Terminų dažnis – tai termino atvejų skaičius tik viename dokumente; nors dokumento dažnumas yra atskirų dokumentų, kuriuose yra terminas, skaičius, jis priklauso nuo viso korpuso. Dabar pažvelkime į atvirkštinio popieriaus dažnio apibrėžimą. Žodžio IDF yra dokumentų skaičius korpuse, atskirtas pagal teksto dažnį.
idf(t) = N/ df(t) = N/N(t)>
Labiausiai paplitęs žodis turėtų būti laikomas mažiau reikšmingu, tačiau elementas (labiausiai apibrėžti sveikieji skaičiai) atrodo per griežtas. Tada paimame popieriaus atvirkštinio dažnio logaritmą (su baze 2). Taigi termino t if tampa:
idf(t) = log(N/ df(t))>
- Skaičiavimas: Tf-idf yra viena geriausių metrikų, leidžiančių nustatyti, kiek terminas yra reikšmingas serijos ar korpuso tekstui. tf-idf yra svorio sistema, kuri kiekvienam dokumento žodžiui priskiria svorį pagal jo termino dažnumą (tf) ir abipusį dokumento dažnumą (tf) (idf). Žodžiai, turintys didesnį svorį, laikomi reikšmingesniais.
Paprastai tf-idf svoris susideda iš dviejų terminų -
- Normalizuotas terminų dažnis (tf) atvirkštinis dokumento dažnis (idf)
tf-idf(t, d) = tf(t, d) * idf(t)>
Python tf-idf reikšmes galima apskaičiuoti naudojant TfidfVektorizer() metodas in sklearn modulis.
Sintaksė:
sklearn.feature_extraction.text.TfidfVectorizer(įvestis)
Parametrai:
įvestis : Tai reiškia perduodamą parametrų dokumentą, tai gali būti failo pavadinimas, failas arba pats turinys.
Atributai:
žodynas _ : Jis grąžina terminų žodyną kaip raktus ir reikšmes kaip savybių indeksai. idf_ : Tai grąžina Kaip parametras perduodamo dokumento atvirkštinis dokumento dažnio vektorius.
Grąžinimai:
fit_transform(): grąžina terminų masyvą kartu su tf-idf reikšmėmis. get_feature_names(): grąžina funkcijų pavadinimų sąrašą.
Žingsnis po žingsnio metodas:
- Importuoti modulius.
Python3
# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> |
>
>
- Surinkite eilutes iš dokumentų ir sukurkite korpusą su eilučių rinkiniu iš dokumentų d0, d1, ir d2 .
Python3
# assign documents> d0>=> 'Geeks for geeks'> d1>=> 'Geeks'> d2>=> 'r2j'> # merge documents into a single corpus> string>=> [d0, d1, d2]> |
>
>
- Gaukite tf-idf vertes iš fit_transform() metodas.
Python3
# create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> |
>
kaip skaityti iš csv failo java
>
- Rodyti korpuse esančių žodžių idf reikšmes.
Python3
# get idf values> print>(>'
idf values:'>)> for> ele1, ele2>in> zip>(tfidf.get_feature_names(), tfidf.idf_):> >print>(ele1,>':'>, ele2)> |
>
>
Išvestis:

- Rodyti tf-idf reikšmes kartu su indeksavimu.
Python3
# get indexing> print>(>'
Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>'
tf-idf value:'>)> print>(result)> # in matrix form> print>(>'
tf-idf values in matrix form:'>)> print>(result.toarray())> |
>
>
Išvestis:

java dizaino modelis
The rezultatas kintamąjį sudaro unikalūs žodžiai ir tf-if reikšmės. Jį galima patobulinti naudojant toliau pateiktą paveikslėlį:

Iš aukščiau esančio paveikslėlio galima sugeneruoti šią lentelę:
| dokumentas | Žodis | Dokumento rodyklė | Žodžių rodyklė | tf-idf vertė |
|---|---|---|---|---|
| d0 | dėl | 0 | 0 | 0,549 |
| d0 | geeks | 0 | 1 | 0,8355 |
| d1 | geeks | 1 | 1 | 1000 |
| d2 | r2j | 2 | 2 | 1000 |
Toliau pateikiami keli pavyzdžiai, kuriuose vaizduojama, kaip apskaičiuoti žodžių tf-idf reikšmes iš korpuso:
1 pavyzdys: Žemiau pateikiama visa programa, pagrįsta aukščiau nurodytu metodu:
Python3
# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign documents> d0>=> 'Geeks for geeks'> d1>=> 'Geeks'> d2>=> 'r2j'> # merge documents into a single corpus> string>=> [d0, d1, d2]> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get idf values> print>(>'
idf values:'>)> for> ele1, ele2>in> zip>(tfidf.get_feature_names(), tfidf.idf_):> >print>(ele1,>':'>, ele2)> # get indexing> print>(>'
Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>'
tf-idf value:'>)> print>(result)> # in matrix form> print>(>'
tf-idf values in matrix form:'>)> print>(result.toarray())> |
>
>
Išvestis:

2 pavyzdys: Čia tf-idf reikšmės apskaičiuojamos iš korpuso, turinčio unikalias reikšmes.
Python3
# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign documents> d0>=> 'geek1'> d1>=> 'geek2'> d2>=> 'geek3'> d3>=> 'geek4'> # merge documents into a single corpus> string>=> [d0, d1, d2, d3]> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get indexing> print>(>'
Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>'
tf-idf values:'>)> print>(result)> |
>
>
Išvestis:

3 pavyzdys: Šioje programoje tf-idf reikšmės apskaičiuojamos iš korpuso, turinčio panašius dokumentus.
Python3
# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign documents> d0>=> 'Geeks for geeks!'> d1>=> 'Geeks for geeks!'> # merge documents into a single corpus> string>=> [d0, d1]> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get indexing> print>(>'
Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>'
tf-idf values:'>)> print>(result)> |
funkcijos c
>
>
Išvestis:

4 pavyzdys: Žemiau yra programa, kurioje bandome apskaičiuoti vieno žodžio tf-idf reikšmę geeks kartojama kelis kartus keliuose dokumentuose.
Python3
# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign corpus> string>=> [>'Geeks geeks'>]>*>5> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get indexing> print>(>'
Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>'
tf-idf values:'>)> print>(result)> |
>
>
Išvestis:
