Как продолжение, Существует ли скрипт анализа текста 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]
Проблема, с которой я столкнулся, заключается в получении слишком большого количества повторяющихся значений для каждого описания.
Чтобы применить модель пакета слов для классификации текста, я могу очистить таблицу описания и классификацию, однако, как я могу классифицировать по категориям? Кажется, что пакет слов работает для всего документа, а не для таблицы.