Как можно классифицировать текстовую модель пакета слов по заданным категориям? - PullRequest
0 голосов
/ 27 октября 2019

Как продолжение, Существует ли скрипт анализа текста Python для классификации текста с несколькими классификациями? , я создал следующие сценарии ниже.

Две таблицы, с которыми я работаюявляются таблицей описания (я показываю только 5 записей):

Description
--------------------------
Electrical parts for cars
Magnesium oxide
Lights
Live animals
Soda Water

и таблицей категорий (я показываю только 5 записей)

Category Number | Category Description
-------------------------------------------
1               | Car parts including electrical systems
2               | Vitamins
3               | Live animals
3               | Drinks including carbonated beverages
4               | Visual Equipment

Я создал следующий скриптчтобы удалить ключевое слово и символы из двух отдельных таблиц, которые у меня есть, после изменения их обоих в Panda Dataframes:

import pandas as pd
import re

from pyspark.sql.types import StringType
from nltk.corpus import stopwords

user_defined_stop_words = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','kg']

i = nltk.corpus.stopwords.words('english')
j = user_defined_stop_words

stopwords = set(i).union(i)

def preprocess(x):
    x = re.sub('[^a-zA-Z \n\.]', '',x.lower())
    x = [w for w in x.split() if w not in set(stopwords)]
    return ' '.join(x)

df['descrp_clean'] = df['descrp'].apply(preprocess)

Затем я маркирую описание и описание категории, которое содержит текст, для каждой таблицы.

import pandas as pd
from nltk import word_tokenize

df['descrp_tok'] = df['descrp_clean'].apply(word_tokenize)

В таблице категорий я создаю фрейм данных, в котором каждое отдельное ключевое слово токена для каждого номера категории представляет собой запись:

Import pandas as pd

Rows = list()
For row in df[['Category Number', 'descrp_tok']].iterrows():
   r = row[1]
   for word in r.descrp_tok:
      rows.append((r.twodig. word))

catlist = pd.DataFrame(rows, columns=['Category Number', 'word']

, которая приводит к следующему (я показываю только 5 записей):

Category Number | Word
-------------------------------------------
1               | car
1               | parts
1               | including
1               | electrical
1               | systems

Затем я удаляю повторяющиеся ключевые слова, а затем создаю словарь категорий, каждое слово которого связано с кодами категорий, для которых имеется запись:

import pandas

catlist = catlist.drop_duplicates(keep='first')
catlist = catlist.reset_index(drop=True)

catlistdict = dict(catlist.groupby('word')['twodig'].apply(list)

После выполнения тех же следующих шагов с другой таблицей описания вплоть до токенизации (но не сглаживания или создания второго словаря) я сопоставляю таблицу описания со словарем списка категорий. Он создает таблицу, которая показывает для каждой записи описания, сколько ключевых слов категории и их номеров категорий совпадают.

row |  Description                             |  Category Numbers
0   |  [womens, pants, nylon, plyester, lycra] |  [None, [72,87], None, [3,51,52,53,54,55], [50]]
1   |  [tall, gld, geo, candle, holder, set]   |  [[21, 83], None, None, None, None, [42,44,45]]
2   |  [fuel, aviation, turbine, engine]       |  [[10, 62], [84], [54,55,56,57,59,],None]]
3   |  [rigid, curve, pas, receptor, boar]     |  [7, 44], [23], None, [23, 27, 84], [4]]
4   |  [paper, pattern]                        |  [[39, 40, 45, 88], [48, 49, 52]]
5   |  [molybdenum, carbide]                   |  [[27, 32, 80], None]

Проблема, с которой я столкнулся, заключается в получении слишком большого количества повторяющихся значений для каждого описания.

Чтобы применить модель пакета слов для классификации текста, я могу очистить таблицу описания и классификацию, однако, как я могу классифицировать по категориям? Кажется, что пакет слов работает для всего документа, а не для таблицы.

...