Могу предложить 3 подхода к упрощению задачи:
- Очевидный. Использовать
ключевые слова
и шаблон поиска. Ключевыми словами могут быть: "вилка цен", "ценовая вилка", "вилка для цен", и т.д.
Ключевые слова для пометки неценовых вилок: "Вилка в спортивных ставках", "Велосипедная вилка" и т.д.
Здесь нужно не забывать о регистре;
- Странный. Использовать
регулярные выражения
. Например, отфильтровать все строки, где есть часть строки "цен". Здесь возможны ложные срабатывания "Столовая вилка - ценный прибор";
ML-подход
. Разметить часть выборки, написать модель, обучить её и разметить ей всё остальное.
Пример кода для ML-модели на python:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
corpus = ["Столовый прибор", "Вилка в спортивных ставках", "Велосипедная вилка", "Вилка цен", "Вилка в розетку"]
labels = [0, 1, 0, 1, 0] # 0 - не связано с вилкой цен, 1 - связано с вилкой цен
X_train, X_test, y_train, y_test = train_test_split(corpus, labels, test_size=0.2, random_state=42)
vectorizer = TfidfVectorizer()
X_train_vectors = vectorizer.fit_transform(X_train)
X_test_vectors = vectorizer.transform(X_test)
classifier = LinearSVC()
classifier.fit(X_train_vectors, y_train)
accuracy = classifier.score(X_test_vectors, y_test)
new_text = "Вилка для цен"
new_text_vector = vectorizer.transform([new_text])
predicted_label = classifier.predict(new_text_vector)
print("Predicted label:", predicted_label)
print("Accuracy:", accuracy)