Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1417274328
ВладОшин
2014-11-29 18:18
2015.09.10
Что за правило?


2-1395675878
SKIPtr
2014-03-24 19:44
2015.09.10
как получить формат DateTime из двух DateTimePicker


15-1417815002
Юрий
2014-12-06 00:30
2015.09.10
С днем рождения ! 6 декабря 2014 суббота


15-1414269018
Юрий
2014-10-26 00:30
2015.09.10
С днем рождения ! 26 октября 2014 воскресенье


3-1305109078
patrick1968
2011-05-11 14:17
2015.09.10
Десятичные поля запроса.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский