Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Правильный разбор строки на c#

#c_sharp


Например есть массив стоп слов 

var stops = new string[]
            {
                "район","р-н","город","г.","посёлок городского типа","п.г.т.","р.п.","рабочий
посёлок","к.п.","курортный посёлок","к.","кишлак","пс","поселковый совет","сс","сельсовет",
                "смн","сомон","вл.","волость","д.п.","дачный поселковый совет","п.","посёлок
сельского типа","н.п.","населённый пункт","п.ст.","посёлок при станции","ж/д ст.",
                "железнодорожная станция","с.","село","м.","местечко","д.","деревня","сл.","слобода","ст.","станция","ст-ца","станица","х.","хутор","у.","улус","рзд.","разъезд","клх",
                "колхоз","свх","совхоз","зим.","зимовье"
            };


От сервиса прилетает разный набор в строке, например может прилететь "деревня Новгородская"
или "Нижний Новгород"
Как правильно реализовать чистку входящей строки от стоп слов?
Короче, если кратко, то в строке должно остаться только название населенного пункта.
    


Ответы

Ответ 1



public static string Sanitize(string s) { var stops = new string[] { "район","р-н","город","г.","посёлок городского типа","п.г.т.","р.п.","рабочий посёлок","к.п.","курортный посёлок","к.","кишлак","пс","поселковый совет","сс","сельсовет", "смн","сомон","вл.","волость","д.п.","дачный поселковый совет","п.","посёлок сельского типа","н.п.","населённый пункт","п.ст.","посёлок при станции","ж/д ст.", "железнодорожная станция","с.","село","м.","местечко","д.","деревня","сл.","слобода","ст.","станция","ст-ца","станица","х.","хутор","у.","улус","рзд.","разъезд","клх", "колхоз","свх","совхоз","зим.","зимовье" }; stops = stops.OrderByDescending(st => st.Length).ToArray(); foreach (string stop in stops) { // не создавать каждый раз, кэшировать в статике! Regex r = new Regex(@"(\s|^)" + Regex.Escape(stop) + @"(\s|$)"); s = r.Replace(s, ""); } return s; } public static void Main(string[] args) { Console.WriteLine(Sanitize("деревня Новгородская")); Console.WriteLine(Sanitize("посёлок городского типа Новгородский")); } Fiddle: https://dotnetfiddle.net/88YJ7X

Комментариев нет:

Отправить комментарий