Форум программистов, компьютерный форум, киберфорум
Konst2016
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Основы препроцессоринга текста для NLP

Запись от Konst2016 размещена 22.01.2022 в 14:14
Показов 1557 Комментарии 0
Метки nlp, python, python3, sklearn

Нажмите на изображение для увеличения
Название: knigi.jpg
Просмотров: 343
Размер:	166.6 Кб
ID:	7377
Здравствуйте дорогие читатели!В этой статье я хочу показать реализованные неким автором By torselllo c сайта nlpx.net http://nlpx.net/archives/57
tf-idf (term frequency-inverse document frequency или на рус., частотность терминов-обратная частотность документов) и и их же реализацию на
sklearn(пакет sklearn.feature_extraction.text) а также bag of words (мешок слов) или count vector(вектор счета)-тот же пакет.
Итак,
Term Frequency
TF — это частотность термина, которая измеряет, насколько часто термин встречается в документе.
Формула:
Bash
1
TF термина а = (Количество раз, когда термин а встретился в тексте / количество всех слов в тексте)
Реализация:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import collections
 
def compute_tf(text):
#На вход берем текст в виде списка (list) слов
    #Считаем частотность всех терминов во входном массиве с помощью 
    #метода Counter библиотеки collections
    tf_text = collections.Counter(text)
    for i in tf_text:
        #для каждого слова в tf_text считаем TF путём деления
        #встречаемости слова на общее количество слов в тексте
        tf_text[i] = tf_text[i]/float(len(text))
    #возвращаем объект типа Counter c TF всех слов текста
    return tf_text
Bash
1
2
3
4
text = ['hasta', 'la', 'vista', 'baby', 'la', 'vista', 'la']
print compute_tf(text)
Out: Counter({'la': 0.42857142857142855, 'vista': 0.2857142857142857, 
'hasta': 0.14285714285714285, 'baby': 0.14285714285714285})
Inverse Document Frequency
IDF — это обратная частотность документов. Она измеряет непосредственно важность термина. То есть, когда мы считали TF, все термины считаются как бы равными
по важности друг другу. Но всем известно, что, например, предлоги встречаются очень часто, хотя практически не влияют на смысл текста.
И что с этим поделать? Ответ прост — посчитать IDF.
Формула:
Bash
1
IDF термина а = логарифм(Общее количество документов / Количество документов, в которых встречается термин а)
Реализация:
Python
1
2
3
4
5
6
7
8
import math
 
def compute_idf(word, corpus):
#на вход берется слово, для которого считаем IDF
#и корпус документов в виде списка списков слов
        #количество документов, где встречается искомый термин
        #считается как генератор списков
        return math.log10(len(corpus)/sum([1.0 for i in corpus if word in i]))
Bash
1
2
3
4
5
6
        
texts = [['pasta', 'la', 'vista', 'baby', 'la', 'vista'], 
['hasta', 'siempre', 'comandante', 'baby', 'la', 'siempre'], 
['siempre', 'comandante', 'baby', 'la', 'siempre']]
print compute_idf('pasta', texts)
Out: 0.47712125472
Term Frequency — Inverse Document Frequency
А затем мы умножаем TF на IDF и получаем — TF-IDF!
Bash
1
TF-IDF термина а = (TF термина а) * (IDF термина а)
(реализацию пропустил).
Итак поработаем с sklearn для корпуса
Python
1
2
3
4
corpus = [
    "I like this movie, it`s funny", "I hate this movie.",
    "This was awersome!I like it.", "Nice one, I love it."
]
Bag of words:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sklearn.feature_extraction.text import CountVectorizer
 
 
corpus = [
    "I like this movie, it`s funny", "I hate this movie.",
    "This was awersome!I like it.", "Nice one, I love it."
]
cv = CountVectorizer()
 
word_count_vector = cv.fit_transform(corpus)
print(word_count_vector.toarray())
"""
->
[[0 1 0 1 1 0 1 0 0 1 0]
 [0 0 1 0 0 0 1 0 0 1 0]
 [1 0 0 1 1 0 0 0 0 1 1]
 [0 0 0 1 0 1 0 1 1 0 0]]
"""
Tf-idf:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
 
corpus = [
    "I like this movie, it`s funny", "I hate this movie.",
    "This was awersome!I like it.", "Nice one, I love it."
]
       
cv = CountVectorizer()
 
word_count_vector = cv.fit_transform(corpus)
print(word_count_vector.toarray())
"""
->
[[0 1 0 1 1 0 1 0 0 1 0]
 [0 0 1 0 0 0 1 0 0 1 0]
 [1 0 0 1 1 0 0 0 0 1 1]
 [0 0 0 1 0 1 0 1 1 0 0]]
"""
tfidf_transformer = TfidfTransformer(smooth_idf=True, use_idf=True)
tfidf_transformer.fit(word_count_vector)
print(tfidf_transformer.idf_)
"""
->
[1.91629073 1.91629073 1.91629073 1.22314355 1.51082562 1.91629073
 1.51082562 1.91629073 1.91629073 1.22314355 1.91629073]
 
"""
Метки nlp, python, python3, sklearn
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru