Удалить все союзы и предлоги

Artproma

Client
Регистрация
01.07.2014
Сообщения
69
Благодарностей
4
Баллы
8
Есть текст, хочу в нем удалить все союзы и предлоги
Союзы
и, а, но, да, или, либо, ни–ни, то–то, и, да, ни–ни, зато, однако, же, или, либо, то, то ли, не то, что, чтобы, как, потому что, так как, если, хотя, когда, как, как только, между тем, лишь, едва, пока, ибо, потому, оттого, так как, из-за того, чтобы, дабы, если, если бы, ежели, ежели бы, коли, когда, когда бы, хотя, хоть, хотя бы, пусть, даром что, как, как бы, как будто, будто, будто бы, словно, словно как, точно, так что
Предлоги
В, на, под, к, у, над, Из-за, из-под, через, к, до, с, по, от, за, Из-за, Для, на, С, без, в, по, О, об, про, с, по

Как быть?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 660
Благодарностей
10 131
Баллы
113
Есть текст, хочу в нем удалить все союзы и предлоги
Союзы
и, а, но, да, или, либо, ни–ни, то–то, и, да, ни–ни, зато, однако, же, или, либо, то, то ли, не то, что, чтобы, как, потому что, так как, если, хотя, когда, как, как только, между тем, лишь, едва, пока, ибо, потому, оттого, так как, из-за того, чтобы, дабы, если, если бы, ежели, ежели бы, коли, когда, когда бы, хотя, хоть, хотя бы, пусть, даром что, как, как бы, как будто, будто, будто бы, словно, словно как, точно, так что
Предлоги
В, на, под, к, у, над, Из-за, из-под, через, к, до, с, по, от, за, Из-за, Для, на, С, без, в, по, О, об, про, с, по

Как быть?
Как вариант, задачу может решить 'Обработка текста - Замена' на пустоту по регулярке: \s.{0,5}\s
 
  • Спасибо
Реакции: Artproma

Artproma

Client
Регистрация
01.07.2014
Сообщения
69
Благодарностей
4
Баллы
8
не совсем понятна регулярка
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 660
Благодарностей
10 131
Баллы
113

Artproma

Client
Регистрация
01.07.2014
Сообщения
69
Благодарностей
4
Баллы
8
Вариант интересный, но он срубает лишние слова.
Может как-то по другому?
Например перебором по списку. Но тут буква и, может срубить окончание у слов. Например "диски", может стать "дск"
 

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
555
Благодарностей
400
Баллы
63
C#:
var text = project.Variables["text"].Value;

var wordsToRemove = new string[]
{
    // Составные союзы (сначала, чтобы не обрезать части)
    "из-за того", "потому что", "так как", "как только", "между тем",
    "не то", "то ли", "если бы", "ежели бы", "когда бы", "хотя бы",
    "даром что", "как бы", "как будто", "будто бы", "словно как",
    "так что", "ни–ни", "то–то",
    // Одиночные союзы
    "чтобы", "потому", "оттого", "однако", "хотя", "когда", "ежели",
    "пусть", "словно", "будто", "точно", "зато", "либо", "едва",
    "пока", "лишь", "хоть", "коли", "дабы", "хотя", "если",
    "как", "что", "ибо", "или", "да", "но", "же", "то", "ни",
    "а", "и",
    // Предлоги составные
    "из-за", "из-под",
    // Предлоги одиночные
    "через", "для", "без", "над", "под", "про", "об",
    "из", "по", "от", "за", "на", "до", "об", "от",
    "в", "к", "у", "с", "о"
};

// Сортируем по убыванию длины, чтобы сначала удалялись составные
System.Array.Sort(wordsToRemove, (a, b) => b.Length.CompareTo(a.Length));

foreach (var word in wordsToRemove)
{
    // Удаляем слово как отдельное слово (с учётом границ слова)
    // Паттерн: пробел/начало + слово + пробел/конец/знак препинания
    text = System.Text.RegularExpressions.Regex.Replace(
        text,
        @"(?<![а-яёА-ЯЁa-zA-Z])" + System.Text.RegularExpressions.Regex.Escape(word) + @"(?![а-яёА-ЯЁa-zA-Z])",
        "",
        System.Text.RegularExpressions.RegexOptions.IgnoreCase
    );
}

// Убираем лишние пробелы (двойные, тройные и т.д.)
text = System.Text.RegularExpressions.Regex.Replace(text, @" {2,}", " ").Trim();

project.Variables["result"].Value = text;
или такой вариант

C#:
var text = project.Variables["text"].Value;

// Уникальный список, отсортированный по длине (длинные — первыми)
var wordsToRemove = new System.Collections.Generic.HashSet<string>(System.StringComparer.OrdinalIgnoreCase)
{
    // Составные союзы и предлоги (длинные — в первую очередь)
    "из-за того", "потому что", "так как", "как только", "между тем",
    "не то", "то ли", "если бы", "ежели бы", "когда бы", "хотя бы",
    "даром что", "как бы", "как будто", "будто бы", "словно как", "так что",
    // Одиночные союзы
    "чтобы", "потому", "оттого", "однако", "хотя", "когда", "ежели",
    "пусть", "словно", "будто", "точно", "зато", "либо", "едва",
    "пока", "лишь", "хоть", "коли", "дабы", "если", "ибо", "или", "да",
    "но", "же", "то", "ни", "а", "и", "как", "что",
    // Составные предлоги
    "из-за", "из-под",
    // Одиночные предлоги
    "через", "для", "без", "над", "под", "про", "об", "из",
    "по", "от", "за", "на", "до", "в", "к", "у", "с", "о"
}.OrderByDescending(w => w.Length).ToArray();

// Один проход — все паттерны объединяем в одно регулярное выражение
var pattern = @"(?<![а-яёА-ЯЁa-zA-Z\-])(" +
    string.Join("|", wordsToRemove.Select(w => System.Text.RegularExpressions.Regex.Escape(w))) +
    @")(?![а-яёА-ЯЁa-zA-Z\-])";

var regex = new System.Text.RegularExpressions.Regex(
    pattern,
    System.Text.RegularExpressions.RegexOptions.IgnoreCase |
    System.Text.RegularExpressions.RegexOptions.Compiled
);

text = regex.Replace(text, "");

// Убираем лишние пробелы и знаки препинания-дубликаты у слов
text = System.Text.RegularExpressions.Regex.Replace(text, @"\s{2,}", " ").Trim();
// Убираем пробел перед запятой/точкой/точкой с запятой
text = System.Text.RegularExpressions.Regex.Replace(text, @"\s+([,\.;:!?])", "$1");

project.Variables["result"].Value = text;


сделал через ИИ
 
  • Спасибо
Реакции: Artproma

Artproma

Client
Регистрация
01.07.2014
Сообщения
69
Благодарностей
4
Баллы
8
Блин, да почему я все время забываю про ИИ
Спасибо огромное
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
2 057
Благодарностей
1 889
Баллы
113
  • Спасибо
Реакции: deskuznetsov

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 660
Благодарностей
10 131
Баллы
113
Вариант интересный, но он срубает лишние слова.
Может как-то по другому?
Например перебором по списку. Но тут буква и, может срубить окончание у слов. Например "диски", может стать "дск"
То что вы хотите удалить, оно обычно обрамлено пробелами или пробелом и знаком препинания, можете усложнить регулярку для этого. Можно объединить весь список слов в одну регулярку, через |, а можно брать из спсика и удалять в цикле, преобразуя взятое из списка в регулярное выражение, чтобы не рубило вхождение в слова.
 
Последнее редактирование:

Кто просматривает тему: (Всего: 4, Пользователи: 3, Гости: 1)