dasha_dx
@dasha_dx

Как при выгрузке определить ограничение по словарю?

Суть:
1) у меня есть большое кол-во текстов из ВК
2) а также словарь слов, с которыми я работаю

Мне нужно из этой базы тестов вытащить только те тексты, которые касаются выбранных слов (пусть будет "квартира" и "дом")
это у меня вроде как получилось...
НО...
мне нужно, чтобы в выгруженных текстах не было других слов из моего словаря!
т.е. если в тексте встречается "квартира", "стул", "шкаф" - то этот текст не должен выгружаться

т.е. в итоге у меня должен быть набор текстов, где встречается только одно слово из словаря, и других там не должно быть

собственно, сам код:
import csv
from collections import Counter
house_list = set(["квартира", "дом"]	)
in_csv = open("C:\\Hun\\texts_for_topicminer\\Vk_csv_full_lem_CORRECTED.csv", "rt", newline="")
out_csv =  open("C:\\Hun\\dasha\\house_counter.csv", "wt", newline="")
full_house = open("C:\\Hun\\dasha\\house_list-2.csv", "rt", newline="")
reader = csv.reader(in_csv, delimiter=";")
writer = csv.writer(out_csv)
full_house_reader = csv.reader(full_house, delimiter=";")
full_house_list = set()
for row in full_house_reader:
	full_house_list.add(row[0])
print(full_house_list)
for house in house_list:
	full_house_list.remove(house)
writer.writerow(["line_number", "auth_id", "date", "text", "city", "region", "text_length", "квартира", "дом"])
for num, row in enumerate(reader):
	words_list = row[0].split()
	if set(full_house_list).issubset(words_list):
		continue
	else:
		cnt = Counter(words_list)
		two_house = False
		for  house in house_list:
			if cnt[house] != 0:
				two_house = True
		if two_house:
			house_counter = {}
			for house in house_list:
				house_counter[houses] = cnt[house]
			writer.writerow([num + 1, row[1], row[4], row[0], row[7], row[8], len(words_list), house_counter["квартира"], house_counter["дом"]])


как это можно сделать? как это прописать в коде?
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
Код не идиоматичный. Непонятно, что делает вот это. full_house_list - это список слов или текстов?

for house in house_list:
  full_house_list.remove(house)


1. Я бы предположил, что вам надо входные тексты разбивать на слова прежде всего и затем находить пересечения множества разрешённых слов и множества запрещённых слов с текстом, соответственно. Но тогда оба множества должны все словоформы заключать в себе.
2. Ну а вообще, в более продвинутой форме, вам понадобится движок для стемминга.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы