Страницы

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

четверг, 25 октября 2018 г.

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

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


Ответ

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

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

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