Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Внизвыделение наиболее частых последовательностей Найти похожие ветки
← →
turbouser © (2014-03-28 00:30) [40]Ип Ман - китаец такой был, мастер боевых искусств :)
http://ru.wikipedia.org/wiki/%D0%98%D0%BF_%D0%9C%D0%B0%D0%BD
← →
clickmaker © (2014-03-28 08:47) [41]> Ип Ман - китаец
значит, надо анализировать еще и регистр символов
← →
[ВладОшин] © (2014-03-28 20:56) [42]
> Кщд (27.03.14 21:36) [37]
обязательно, но потом
надо пока идею проверить 6)
← →
[ВладОшин] © (2014-03-28 21:04) [43]
> обязательно, но потом
т.е. пока "так быстро бегаем, что не успеваем тачки грузить" (с) :)
← →
[ВладОшин] © (2014-03-31 21:41) [44]есть таблица, с уже распознанными именами
CREATE TABLE [dbo].[CorpPrivate](
[name] [varchar](999) NULL,
[iscorp] [varchar](999) NULL
) ON [PRIMARY]
--------
создадим таблицу-справочник
CREATE TABLE [dbo].[Spr_CorpPrivate](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[Word] [varchar](50) NOT NULL,
[Corp] [int] NOT NULL,
[Priv] [int] NOT NULL
) ON [PRIMARY]
и триггер, для облегчения заполнения справочникаALTER TRIGGER [dbo].[insert_spr_corp_priv]
ON [dbo].[Spr_CorpPrivate]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[Spr_CorpPrivate]
(Word, [Corp], [Priv])
SELECT distinct I.[Word], 0, 0
FROM inserted I
left join [dbo].[Spr_CorpPrivate] T on T.Word = I.Word
where T.Word is null;
update T
set t.corp = t.corp + Z.corp,
t.priv = t.priv + Z.priv
from [dbo].[Spr_CorpPrivate] T
join (select i.word word, sum(i.corp) corp, sum(i.priv) priv
from inserted i
group by word )
Z on Z.word = T.Word;
END
-------------
процедура вставки в справочник. Тупо по словам вставляем в справочник
ALTER PROCEDURE [dbo].[add_to_spr_corp_priv]
@in_str varchar(1024),
@in_CP char(1)
AS
BEGIN
SET NOCOUNT ON;
declare @str varchar(1024);
declare @CP char(1);
--set @str = "ООО "МОЙ ДОМ"";
--set @CP = "Y";
set @str = @in_str;
set @CP = @in_CP;
set @str = replace(@str, ",", " , ");
set @str = replace(@str, ".", " . ");
set @str = replace(@str, "-", " - ");
set @str = replace(@str, """, " " ");
set @str = replace(@str, " ", " ");
select @str = "select """ + replace(@str, " ", """ as word, 0 corp, 0 priv union all select """) + """,0,0 ";
-- print @str
declare @t table(id int identity, word varchar(100), corp int, priv int);
insert into @t
exec (@str);
if @CP = "Y"
update @t set corp = 1
else
update @t set priv = 1;
insert into [dbo].[Spr_CorpPrivate] ([Word], [Corp], [Priv])
select word, corp, priv
from @t where word <> "";
END
--------------------
копим словаdeclare @FIO varchar(4000), @c char(1);
declare CCC Cursor fast_forward for
select Q.Name, Q.iscorp
from [CorpPrivate] Q;
OPEN CCC;
FETCH NEXT FROM CCC INTO @FIO, @c;
WHILE @@FETCH_STATUS = 0
BEGIN
exec add_to_spr_corp_priv @FIO, @c;
FETCH NEXT FROM CCC INTO @FIO, @c;
END;
CLOSE CCC; DEALLOCATE CCC;
-------------------------
имеем в справочнике:
Word Corp Priv
АРБИТРАЖНЫЙ 570 0
ВТОРОЙ 161 0
СУД 1005 0
ГАВРИЛИНА 3 45
ОЛЬГА 291 14024
и т.п.
дальше пока не написал :)
смысл - тестируемую разбиваем по словам и все слова ищем в таблице-справочнике соответствий, суммируя признаки.
Каких признаков больше - то и есть.
← →
[ВладОшин] © (2014-03-31 21:45) [45]
> дальше пока не написал :)
написал :)
но нет, надо не так. Переписываю..
← →
картман © (2014-03-31 22:03) [46]
> Каких признаков больше - то и есть.
да ладно, т.е. "ОАО Алексей Иванов" - частник?
← →
[ВладОшин] © (2014-03-31 22:40) [47]ну где же
SELECT sum([Corp]) - sum([Priv])
FROM [dbo].[Spr_CorpPrivate]
where word in (
"ОАО",
"Алексей",
"Иванов"
)
72 260!
← →
[ВладОшин] © (2014-03-31 22:43) [48]точнее так надо:
SELECT cast((sum([Corp]) - sum([Priv])) as float) / (sum([Corp]) + sum([Priv]))
FROM [Coordinates].[dbo].[Spr_CorpPrivate]
where word in (
"ОАО",
"Алексей",
"Иванов"
)
← →
Styx (2014-03-31 23:25) [49]
> Ип Ман - китаец такой был, мастер боевых искусств :)
>
С китайцами и прочими азиатами вообще беда, мне в журнал статьи приходят, нужно из полного имени сделать фамилию и инициалы... и... и... и всё :(
← →
clickmaker © (2014-03-31 23:46) [50]Удалено модератором
← →
[ВладОшин] © (2014-03-31 23:50) [51]ь знак не может быть не в конце :)
← →
картман © (2014-04-01 00:06) [52]Удалено модератором
← →
й (2014-04-01 10:42) [53][ВладОшин] > ...суммируя признаки. Каких признаков больше - то и есть.
не уверен. я бы предложил попробовать считать среднеарифметическое от Corp/(Corp+Priv)
то есть если у вас в названии будет 2 слова с противоположным соотношением попаданий, но разными частотами употребления, типа
Слово1 10000 100
Слово2 10 1000
то получите (10000+10)/(100+1000) (у вас формула другая и зачем там вычитание я вообще не понял, но суть вроде та же) т.е. гораздо чаще встречающееся слово полностью "задавит" второе
в моём же варианте будет (10000/10100+10/1010)/2 = 0,5 (половинная вероятность попадания в Corp), т.е. противоположные соотношения полностью уравновесили друг друга, несмотря на разные частоты употребления слов
возможно, чаще употребляемые слова и должны вносить большую долю в итог, но навряд ли прямо пропорционально частоте (как у вас) - может быть, пропорционально логарифму от частоты или корню, как-то так
← →
ВладОшин © (2014-04-01 11:08) [54]
> й (01.04.14 10:42) [53]
> зачем там вычитание я вообще не понял
все просто: если будет минус, то это ФизЛицо. Плюс - ЮрЛицо.
А величина - вероятность. Да, это не совсем вероятность, в строгом понимании.
Скажем так, это некая количественная оценка, близкая к вероятности.
>> т.е. гораздо чаще встречающееся слово полностью "задавит" второе
да. Это и преследуется.
← →
ВладОшин © (2014-04-01 11:26) [55]print [dbo].[IsCorpProbality]("СОЛИКАМСКИЙ ИГОРЬ СЕРГЕЕВИЧ")
-0.919797
но:
print [dbo].[IsCorpProbality]("ИП СОЛИКАМСКИЙ ИГОРЬ СЕРГЕЕВИЧ")
-0.0447461
т.о. я бы не очень доверял abs(оценке) < 0.3 или 0.4
итого
Руководство говорит: Дайте 1000 ФЛ. Или сажаем оператора часа на 2
или
Пишем: select top 1000 .. where .. and IsCorpProbality () < -0.4
или апдейтим таблу по abs(оценке) > 0.3 в зависимости от знака
остальное операторы глазами доотметят. Если надо всех разобрать.
Но обычно не надо :)
Есть список, тысяч на 50
Достаточно по 10-20 тысяч выбрать, что бы предел нашего "производства" перекрыть
← →
й (2014-04-01 12:43) [56]ок, главное - эмпирически проверить оптимальность
и тогда уж select top 1000 .. order by IsCorpProbality DESC
← →
ВладОшин © (2014-04-02 10:17) [57]это все хорошо, но все равно это все не то...
>> выделение наиболее частых последовательностей
1. СоликамскЗерно, СтравропольЗерно, КазахстанЗерно,
т.е. ххххЗерно
2. ПензаЗерно
как бы сделать так, что бы имея 1 как ЮЛ, определить что 2 тоже ЮЛ?
разумеется, в общем случае
← →
turbouser © (2014-04-02 10:21) [58]
> [ВладОшин] © (31.03.14 23:50) [51]
>
> ь знак не может быть не в конце :)
А как же Лесь, Василь и т.п.?
← →
turbouser © (2014-04-02 10:27) [59]
> turbouser © (02.04.14 10:21) [58]
>
>
> > [ВладОшин] © (31.03.14 23:50) [51]
> >
> > ь знак не может быть не в конце :)
Сорри :)
Чукча писатель..
← →
ВладОшин © (2014-04-02 10:29) [60]м-да..
товарищи :
Дума А.В.
Мед А.П.
Работа А.М.
Сосна С.П.
с близкой к 100% вероятности - ЮЛ :)
"X.Y." - тоже как-то надо учитывать..
← →
ВладОшин © (2014-04-02 10:30) [61]
> turbouser © (02.04.14 10:27) [59]
ни че. не каждый не поймет :)
← →
ВладОшин © (2014-04-02 10:31) [62]
> turbouser © (02.04.14 10:27) [59]
к тому же, я не прав: Лоськин
← →
Mystic © (2014-10-31 21:05) [63]Байесовские сети, Бернулли, наверное, чуть лучше. Копать можно в сторону учета сочетаний, ...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.053 c