Страницы: 1
RSS
Извлечь из текста только фамилию
 
Здравствуйте всем!
Прошу Вас помочь, во вложении есть пример.
я питался с помощью регулярного выражения извлечь фамилию, но не получается
для этого я использовал  [а-яА-ЯёЁ]+

не обязательно с помощью РВ, можно с помощью ( макроса, PQ, формулы)
 
azma, если перед фамилией только сокращения и знаки, то можно функцией подставить убрать эти сокращения и знаки. Если же перед фамилией еще слово (город и т.д. или т.п.), то машине не объяснить что является фамилией, а что не фамилия.
Если соблюдается такая же погрешность, как в примере, то эта формула обработает правильно более 96 процентов обрабатываемых строк.
При обязательной визуальной проверке правильности полученного результата
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(E2;"ИП";"");"*";"");"ТОО";"");"""";""));" ";ПОВТОР(" ";99));1;99))
 
=SUBSTITUTE(TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE(E5;"""";" "));" ";REPT(" ";99));ISNUMBER(FIND(" "&LEFT(SUBSTITUTE(E5;"""";" ");FIND(" ";SUBSTITUTE(E5;"""";" ")));" ИП ТОО "))*99+1;99));"*";)
Изменено: БМВ - 31.05.2020 08:28:01
По вопросам из тем форума, личку не читаю.
 
Цитата
Михаил Л написал:
Михаил Л
Спасибо большое!
в оригинале встречаются название без фамилии, например:
Кадам
Магай-Атырау
Jurists Т  


Можно сделать так чтобы в ячейках на против этих слов было пусто
Изменено: azma - 31.05.2020 08:26:22
 
А если встретятся отдельно фамилии Ватман или Айсберг, то как быть? И как вы будете определять, это фамилии, или бумага и лед?
 
меня интересуются русские и украинские фамилии
Изменено: azma - 31.05.2020 08:45:34
 
Цитата
azma написал:
меня интересуются русские и украинские фамилии
скрипка
По вопросам из тем форума, личку не читаю.
 
спасибо, понял!

я макросом сделаю Фильтр по нескольким значениям по частичному совпадению
а потом буду использовать формулы
Изменено: azma - 31.05.2020 09:19:17
 
Цитата
с помощью регулярного выражения извлечь фамилию, но не получается
Для данных из примера UDF
Код
Function FIO(cell As String) As String
 With CreateObject("VBScript.RegExp")
     .Pattern = "^(ИП|ТОО)?\s?([""а-яА-ЯёЁ]+)"
     FIO = .Execute(Replace(cell, """", ""))(0).SubMatches(1)
 End With
End Function
 
посмотрите пожалуйста, файл во вложении

формулы, и функция не корректно работают с некоторыми текстами.
прошу Вас сделать так , чтобы из них тоже можно было извлечь фамилию
Изменено: azma - 31.05.2020 12:29:43
 
Доброе время суток
Цитата
azma написал:
прошу Вас
пометить те самые некоторые тексты.
 
azma, запустили формулу. Далее глазами, например, увидели что ИП в конце текста - удалили ИП в столбце А
Цитата
azma написал:
меня интересуются русские и украинские фамилии
А вы когда находите этих людей вы их куда отвозите?)
 
Цитата
Михаил Л написал:
запустили формулу
и получили 12% ошибок 50 / 412. При таких исходных текстах, даже как-то хорошо "распознаёт" :)
 
Цитата
Михаил Л написал:
А вы когда находите этих людей вы их куда отвозите?)
Спасибо большое!
я планирую объединить клиентов разными способами( сами знаете, что операторы дистрибьюторов как попало пишут контрагентов в 1С)
1 этап у меня будет объединить однофамильцев, далее капать глубже чтобы выявить потенциал кожного клиента.
 
Цитата
Андрей VG написал:
получили 12% ошибок 50 / 412
Не знаю хороший это результат или плохой)
И в первом примере были закономерности и во втором. Вот к этим закономерностям и цепляюсь. То что формула не видит фамилий - это факт.
azma, чтоб не было пустых ячеек надо сначала сделать проверку на еслипусто, а потом на еслиошибка.
 
Цитата
azma написал:
я планирую объединить клиентов разными способами..
1 этап у меня будет объединить однофамильцев, далее капать глубже чтобы выявить потенциал кожного клиента
У вас что, своя лаборатория есть?)
 
Цитата
Михаил Л написал:
У вас что, своя лаборатория есть?)
нет, я сотрудник
 
azma, шучу я
 
Цитата
функция не корректно работают с некоторыми текстами.
Что выделять в отдельную ячейку, если ИП или ТОО в конце текста?
Что делать с ЧП?
 
Цитата
Kuzmich написал:
Что выделять в отдельную ячейку, если ИП или ТОО в конце текста? Что делать с ЧП?
только фамилию.
Изменено: azma - 31.05.2020 18:37:17
 
Не цитируйте бездумно. Для простого ответа есть кнопки Имя, Ответить
Приведите сообщение в порядок
 
Так и не понял про ситуацию, если ИП или ТОО в конце текста?
А так попробуйте такую UDF
Код
Function FIO(cell As String) As String
Dim temp As String
 With CreateObject("VBScript.RegExp")
   .Pattern = "[""*«]"
   temp = .Replace(cell, "")
     .Pattern = "^\s?([A-Za-zа-яА-ЯёЁ]+)"
   If InStr(1, temp, "ИП") > 0 Then
     temp = Split(temp, "ИП ", 2)(1)
   ElseIf InStr(1, temp, "ТОО") > 0 Then
     temp = Split(temp, "ТОО ", 2)(1)
   End If
     FIO = .Execute(temp)(0)
 End With
End Function
 
Kuzmich,

у вас хорошо работает
только почему в таких  как ниже переведено   некорректно работает

ЧП   "Джумабаева" г.Шымкент
ЧП "Хажиев Б.Б." г.Шымкент
 
Добавьте в макрос еще проверку на ЧП, как это сделано для ИП и ТОО
В строке ЧП   "Джумабаева" г.Шымкент затесался неразрывный пробел Chr(160),
поэтому попробуйте такую UDF
Код
Function FIO(cell As String) As String
Dim temp As String
 With CreateObject("VBScript.RegExp")
   .Pattern = "[""*«()]"
   temp = .Replace(cell, "")
     .Pattern = "^\s?([A-Za-zа-яА-ЯёЁ-]+)"
   If InStr(1, temp, "ИП") > 0 Then
     temp = Replace(temp, Chr(160), "")
     temp = WorksheetFunction.Trim(Split(temp, "ИП", 2)(1))
   ElseIf InStr(1, temp, "ТОО") > 0 Then
     temp = Replace(temp, Chr(160), "")
     temp = WorksheetFunction.Trim(Split(temp, "ТОО", 2)(1))
   ElseIf InStr(1, temp, "ЧП") > 0 Then
     temp = Replace(temp, Chr(160), "")
     temp = WorksheetFunction.Trim(Split(temp, "ЧП", 2)(1))
   End If
     FIO = .Execute(temp)(0)
 End With
End Function
Изменено: Kuzmich - 31.05.2020 19:57:19
 
Огромное спасибо всем !
Страницы: 1
Наверх