Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите через что делать:

1) Нужно распознавать слова (Петров Иван Иванович), пробовал делать
PATINDEX
искал по пробелам, но результат не совершенен.

2) Нужно распознавать последнюю букву в слове, я делал
 len(Name)-1
, тем самым отсекал последнюю букву (опять таки неправильно то что во всей строке находил, так как все написано в одно поле, сначала пункт 1), после нахождения мне выдает число, как сделать что бы выдавало именно последнюю букву я не знаю :(
8 июл 16, 11:17    [19384781]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
У меня MS SQL 2005

Сразу скажу парсить sys.dm_fts_parser не получится
8 июл 16, 11:20    [19384801]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
aleks2
Guest
Учиться тебе, барин, надо...
USE [Avalon2009]
GO

/****** Object:  UserDefinedFunction [dbo].[f_StrToTableEx]    Script Date: 08.07.2016 13:23:10 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE function [dbo].[f_StrToTableEx](@str nvarchar(4000), @delimiter nvarchar(64)=',')
returns table as
return(
WITH 
  l as (select ld = LEN(@delimiter), [s+d] = @str + @delimiter, ls = len(@str) )
, str_nums ( n1, n2, Number ) AS 
                                ( 
                                select  1 - ld as n1, charindex( @delimiter, [s+d] ) as n2, 0 as Number from l where @str is not null
                                UNION ALL 
                                select n2 as n1, charindex (@delimiter, [s+d], n2 + ld ) as n2, Number + 1 as Number
                                from str_nums cross join l
                                WHERE n2 < ls
                                ) 
select substring( @str, n1 + LEN(@delimiter), n2 - n1 - 1 ) as Value, Number, n1 + 1 as StartPosition FROM str_nums
)
GO

-- извиняй, на пробелы-разделители эта функция не рассчитана ()
select * from [dbo].[f_StrToTableEx](replace(N'Петров Иван Иванович', ' ', ';'), N';')
8 июл 16, 11:28    [19384845]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Pabl0,

напишите CLR функцию для разбора строки.
8 июл 16, 11:34    [19384894]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Pabl0,

всё со склонениями мучаешься?
У меня где-то валяется функция на C, которую мы делали лет 20 назад
для автоматической генерации текстов кадровых приказов по предприятию для программы "Отдел кадров".
Анализировали различные окончания и в ifе меняли на подходящие в зависимости от падежа и рода человека.
Получилось не так уж и длинно... Правильно склоняло в 95% случаев.
Одна беда - много времени прошло, найти её никак не могу.
А то можно было бы реализовать и на SQL.

По-любому, не представляю себе склонения, например, китайских фамилий/имён, или составных фамилий,
или фамилий, оканчивающихся на -оглы, -заде и т.п.
Масса неприятностей подстерегает. Мы тут в какой-то теме всё это обсуждали уже (давно).

В общем, если случится чудо, и мне попадётся та старая функция, то я её здесь выложу.
8 июл 16, 11:39    [19384949]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
iap, мучаюсь это мягко сказано... :)

Буду с нетерпением ждать, но буду надеяться что напишу до этого времени свою :)
8 июл 16, 11:54    [19385104]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Pabl0
iap, мучаюсь это мягко сказано... :)

Буду с нетерпением ждать, но буду надеяться что напишу до этого времени свою :)
Просто в те давние времена всё хранилось на дискетах...
Боюсь, сегодня их уже не прочтёшь, если даже найдёшь.
8 июл 16, 11:56    [19385113]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
iap, :(

Я бы нашел куда её воткнуть :) Если очень постараться можно найти что угодно.
8 июл 16, 11:57    [19385128]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Pabl0,

Я бы вообще не занимался этим на уровне БД. C# regex и прочие text mining
8 июл 16, 12:00    [19385153]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4187
Pabl0
iap, мучаюсь это мягко сказано... :)

Буду с нетерпением ждать, но буду надеяться что напишу до этого времени свою :)


это велосипед, кторый будет делаться долго и мучительно и все равно останется поделкой.

Варианты и комбинации
1. поставить рядом на той же машине sql2012 express, сделать линкед сервер и использовать его возможности
2. написать RESTful вебсервис, который будет заниматься разборками (сам или при помощи молодых sql server или при помощи ОС)
3. написать clr процедуру, которая будет ходить на другой сервер или в сервис

Это все займет меньше времени и будет лучше, чем написание своего велосипеда с костылями
8 июл 16, 12:00    [19385157]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 196
А вот кучка функций для работы со строками, можете воспользоватся ими.
8 июл 16, 13:08    [19385652]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
aleks2
Guest
Ролг Хупин
Это все займет меньше времени и будет лучше, чем написание своего велосипеда с костылями

Угу, напишешь то ты за за пару часов, а неработать это будет всю оставшуюся жизнь.
8 июл 16, 13:43    [19385890]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
aleks2, выдает ошибку "Incorrect syntax near '('."

На вашем же примере.
8 июл 16, 15:06    [19386466]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Pabl0,

сча в управдомы запишут... всё работает
8 июл 16, 15:25    [19386661]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
aleks2
Guest
Pabl0
aleks2, выдает ошибку "Incorrect syntax near '('."

На вашем же примере.


Не ври.

К сообщению приложен файл. Размер - 118Kb
8 июл 16, 15:28    [19386682]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Отлично, парсинг сделал :)

SELECT substring(A.Name, 0, PATINDEX('% %', A.Name)) as FName,
substring(A.Name, PATINDEX('% %', A.Name)+1 , PATINDEX('% %', A.Name)-1) as LName,
substring(A.Name, PATINDEX('% %', A.Name)+PATINDEX('% %', A.Name)+1 , 100) as MName,
FROM Actors A
WHERE A.Actor = 216
8 июл 16, 15:32    [19386710]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
o-o
Guest
Pabl0
aleks2, выдает ошибку "Incorrect syntax near '('."

На вашем же примере.

снова в том же батче выдача прав самому себе?
вот 2005-ый, никаких ошибок
(если кликнуть на ошибке в студии, встанет на нужный стейтмент.
вот и смотрите, в каком именно месте у вас косяк)

К сообщению приложен файл. Размер - 67Kb
8 июл 16, 15:33    [19386719]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Я не хотел кого то упрекнуть во лжи... Извините.
8 июл 16, 15:34    [19386724]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 196
Используя библиотеку из моего поста выше
declare @ValueConst varchar(300) 
select @ValueConst = 'Петров Иван Иванович 1'
select word, case when len(word)>1 then substring(word, len(word), 1) else word end
	from dbo.GETALLWORDS(@ValueConst, default) 
8 июл 16, 15:39    [19386758]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Ребят, ну не фурычит у меня :)

К сообщению приложен файл. Размер - 33Kb
8 июл 16, 15:49    [19386819]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Так понятнее лучше.

К сообщению приложен файл. Размер - 34Kb
8 июл 16, 15:52    [19386837]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
o-o
Guest
1. пишет, функция уже есть.
2. вы зачем все вместе второй раз запускаете? ппц.
скопируйте только вызов функции, в новое окно.
не со своего экрана копируйте, с форума.
и чтоб это было в окне первой строкой.
там явно перед select какая-то скобка строкой выше или еще где
8 июл 16, 15:53    [19386851]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
o-o
Guest
Pabl0
Так понятнее лучше.

ЧТО, ТАК ТРУДНО КЛИКНУТь НА ОШИБКЕ,
ЧТОБ ПОДЧЕРКНУЛО В НУЖНОМ МЕСТЕ?
в чистом окне делайте, чтоб было видно, что ни перед кодом, ни после, нет никаких лишних скобок
8 июл 16, 15:56    [19386869]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265


К сообщению приложен файл. Размер - 6Kb
8 июл 16, 16:01    [19386909]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание слов и нахождение последней буквы  [new]
Pabl0
Member

Откуда:
Сообщений: 265


К сообщению приложен файл. Размер - 30Kb
8 июл 16, 16:01    [19386911]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить