#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
Комментариев нет:
Отправить комментарий