Всем привет, есть большой массив строк, которые состоят из first_name ++ last_name ++ addr_str (увы теоретически, last_name может быть пустой, last и first могут быть поменяны местами и т.д.). addr_str я парсю с помощью libpostal, вроде бы результат неплохой, но с отделение оного от имени, думаю, могут быть проблемы, если тут есть специалисты по такому, подскажите как повысить точность, ну или где почитать по этому поводу. Ткните, если туплю и там всё просто.
Данные на 90% из usa, но есть понемногу из разных стран.
Текущий вариант:
words = address |> String.split(" ")
lower = words |> Enum.map(&String.downcase/1)
{[fist_name | last_names], address} = words |> Enum.split(name_length(lower))
last_name = last_names |> Enum.join(" ")
defp name_length([a, b, c | _]) do
cond do
Regex.match?(~r/[0-9,]/, b) -> 1
Regex.match?(~r/[0-9,]/, c) -> 2
Enum.any?([b, c], & &1 in ["jr"]) -> 3
true -> 2
end
end
В частности может кто знает что добавить в [«jr»], т.е. популярные штуки, которые могут вкрасться в имяфамилию и отделяться пробелом?