Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задача по перестановке слов в строке / 20 сообщений из 20, страница 1 из 1
01.09.2018, 08:44
    #39696555
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Есть массив записей в виде таблицы, где строка представлена не в порядочной схеме. (существительное не всегда в начале слова), например:

Наименование ТМЦАвтоматический выключатель АП 50Б-3МТВыключатель АП 50БВыключатель автоматический серии АП-50БАвтомат АП-50Б-3МТ 50Кислота сернаяСерная кислотаПускатель магнитный ПМЕ221 220ВМагнитный пускатель ПМЕ221ПМЕ221- пускательКлапан А20821-010-15 сильфонныйСильфонный клапан А20821-010-15

Задача. Необходимо разбить строки и переместить имя существительное на первое место
(Первое слово с большой, второе слово /прилагательной/ с маленькой буквы)

Наименование ТМЦВыключатель автоматический АП 50Б-3МТВыключатель АП 50БВыключатель автоматический серии АП-50БАвтомат АП-50Б-3МТ 50Кислота сернаяКислота сернаяПускатель магнитный ПМЕ221 220ВПускатель магнитный ПМЕ221Пускатель- ПМЕ221 Клапан А20821-010-15 сильфонныйКлапан сильфонный А20821-010-15

Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
01.09.2018, 08:48
    #39696556
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Да, еще, это не фиксированные данные необходимо написать код для любого массива записей!
...
Рейтинг: 0 / 0
01.09.2018, 09:20
    #39696560
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Ну... большая и маленькая буквы - это не проблема.

А вот синтаксический разбор строки - это искусственный интеллект надо запилить.

Для имитации искусственного интеллекта можно

1. Разбить все строки на слова.
2. Составить словарь уникальных слов.
Это должно делаться автоматом при вводе новых строк.

3. Врукопашную пометить в этом словаре существительные. Периодически повторяя это, по мере пополнения словаря.

4. Ну а дальше уже легче.
5. Каждую строку разбиваете на слова.
6. Ищете по словарю существительное.
7. Собираете строку из слов обратно, с существительным на первом месте.
...
Рейтинг: 0 / 0
01.09.2018, 11:05
    #39696576
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
В 2017 добавили Machine Learning, как раз можете поиграться. Заодно и нам расскажете.
...
Рейтинг: 0 / 0
01.09.2018, 12:28
    #39696594
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Не думал, что это так сложно...
Разбить на слова решаемая задача. А вычислить прилагательное ( по окончаниям), что действительно неподъемная задача? Может кто то копал в этом направлении? Неужели никак?
...
Рейтинг: 0 / 0
01.09.2018, 13:19
    #39696603
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_CНе думал, что это так сложно...
Разбить на слова решаемая задача. А вычислить прилагательное ( по окончаниям), что действительно неподъемная задача? Может кто то копал в этом направлении? Неужели никак?
"Мороженное" это прилогательное или существительное?
...
Рейтинг: 0 / 0
01.09.2018, 16:22
    #39696653
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
msLex,
Если "Мороженное" приложить к мясу - то прилагательное. Если в стаканчике или на палочке - существительное :)
...
Рейтинг: 0 / 0
01.09.2018, 17:32
    #39696679
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Massa52msLex,
Если "Мороженное" приложить к мясу - то прилагательное. Если в стаканчике или на палочке - существительное :)


ТЕМА ПРИОБРЕТАЕТ ЮМОРИСТИЧЕСКИЙ ОТТЕНОК!

А если серьезно, можно из строки вытащить прилагательное ?
...
Рейтинг: 0 / 0
01.09.2018, 17:35
    #39696680
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_CА если серьезно, можно из строки вытащить прилагательное ?Несомненно, инженеры американской компании Microsoft добавили в свой продукт скрытую функцию, которая вытаскивает из строки исключительно русские прилагательные. Просто ее еще никто не смог найти.

З.Ы. Не несите чушь, пожалуйста. Лингвистический анализ не имеет отношения к тематике данного форума.
...
Рейтинг: 0 / 0
01.09.2018, 18:02
    #39696684
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_CА вычислить прилагательное ( по окончаниям), что действительно неподъемная задача?
Думаю вполне подъёмная. Оцените ведь, какие там у вас возможны окончания и сделайте простой вариант.
...
Рейтинг: 0 / 0
01.09.2018, 18:04
    #39696685
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
lingvonet.html
Немного близко к теме...
...
Рейтинг: 0 / 0
01.09.2018, 18:05
    #39696687
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
...
Рейтинг: 0 / 0
01.09.2018, 18:18
    #39696688
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
function chastrechiRUS($string)
{
    /*
      Группы окончаний:
      1. прилагательное
      2. причастие
      3. глагол
      4. существительное
    */

    $groups 
        = array(
            1 => array('ее', 'ие', 'ые', 'ое', 'ими', 'ыми', 'ей', 
                  'ий', 'ый', 'ой', 'ем', 'им','ым','ом','его',
                  'ого','ему','ому','их','ых','ую','юю','ая',
                  'яя','ою','ею'),
            2 => array('ивш','ывш','ующ','ем','нн','вш','ющ',
                       'щ','ущи','ющи', 'ящий','щих','щие'),
            3 => array('ила','ыла','ена','ейте','уйте','ите',
                       'или','ыли','ей', 'уй','ил','ыл',
                       'им','ым','ен','ило','ыло','ено',
                       'ят','ует','уют','ит','ыт','ены','ить',
                       'ыть','ишь','ую','ю','ла','на','ете',
                       'йте','ли','й','л','ем','н','ло','но',
                       'ет','ют','ны','ть','ешь','нно'),
            4 => array ('а','ев','ов','ие','ье','е','иями',
                        'ями','ами','еи','ии','и','ией',
                        'ей','ой','ий','й','иям','ям','ием',
                        'ем','ам','ом','о','у','ах','иях',
                        'ях','ы','ь','ию','ью','ю','ия',
                        'ья','я','ок', 'мва', 'яна', 'ровать'),
        );

    $res=array();

    $words = explode(' ', $string);
    //print_r($words);
    foreach ($words as $wk=>$w) {
        foreach ($groups as $gk=>$g) {
            foreach ($g as $part) {
                if (substr($w, -strlen($part)) == $part 
                    && $res[$wk][$gk] < strlen($part) // любая часть речи, окончания
                    || stripos($w, $part)!==false 
                    && $gk == 2 //причастие, в любом месте слова
                ) {
                    $res[$wk][$gk] = strlen($part);
                }

            }
        }
        if (!isset($res[$wk][$gk])) {
            $res[$wk][$gk] = 0;
        }
    }


    $result = array();
    foreach ($res as $r) {
        arsort($r);
        array_push($result, key($r));
    }
    return $result;
}



На SQL как перевести или на с# (пардон,что не по теме)
...
Рейтинг: 0 / 0
01.09.2018, 18:29
    #39696689
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_C
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
function chastrechiRUS($string)
{
    /*
      Группы окончаний:
      1. прилагательное
      2. причастие
      3. глагол
      4. существительное
    */

    $groups 
        = array(
            1 => array('ее', 'ие', 'ые', 'ое', 'ими', 'ыми', 'ей', 
                  'ий', 'ый', 'ой', 'ем', 'им','ым','ом','его',
                  'ого','ему','ому','их','ых','ую','юю','ая',
                  'яя','ою','ею'),
            2 => array('ивш','ывш','ующ','ем','нн','вш','ющ',
                       'щ','ущи','ющи', 'ящий','щих','щие'),
            3 => array('ила','ыла','ена','ейте','уйте','ите',
                       'или','ыли','ей', 'уй','ил','ыл',
                       'им','ым','ен','ило','ыло','ено',
                       'ят','ует','уют','ит','ыт','ены','ить',
                       'ыть','ишь','ую','ю','ла','на','ете',
                       'йте','ли','й','л','ем','н','ло','но',
                       'ет','ют','ны','ть','ешь','нно'),
            4 => array ('а','ев','ов','ие','ье','е','иями',
                        'ями','ами','еи','ии','и','ией',
                        'ей','ой','ий','й','иям','ям','ием',
                        'ем','ам','ом','о','у','ах','иях',
                        'ях','ы','ь','ию','ью','ю','ия',
                        'ья','я','ок', 'мва', 'яна', 'ровать'),
        );

    $res=array();

    $words = explode(' ', $string);
    //print_r($words);
    foreach ($words as $wk=>$w) {
        foreach ($groups as $gk=>$g) {
            foreach ($g as $part) {
                if (substr($w, -strlen($part)) == $part 
                    && $res[$wk][$gk] < strlen($part) // любая часть речи, окончания
                    || stripos($w, $part)!==false 
                    && $gk == 2 //причастие, в любом месте слова
                ) {
                    $res[$wk][$gk] = strlen($part);
                }

            }
        }
        if (!isset($res[$wk][$gk])) {
            $res[$wk][$gk] = 0;
        }
    }


    $result = array();
    foreach ($res as $r) {
        arsort($r);
        array_push($result, key($r));
    }
    return $result;
}




На SQL как перевести или на с# (пардон,что не по теме)

Попробуйте яндекс переводчиком
...
Рейтинг: 0 / 0
01.09.2018, 20:09
    #39696699
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_CНа SQL как перевести
Перевод
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
use tempdb;
go

create function dbo.fnPartOfSpeech
(
 @word varchar(100)
)
returns table
as
return (
 with WordEndings as
 (
  select
   t.mask, '%' + t.we as we
  from
   (
    values
     (1, 'ее'), (1, 'ие'), (1, 'ые'), (1, 'ое'), (1, 'ими'), (1, 'ыми'), (1, 'ей'),  
     (1, 'ий'), (1, 'ый'), (1, 'ой'), (1, 'ем'), (1, 'им'),(1, 'ым'),(1, 'ом'),(1, 'его'), 
     (1, 'ого'),(1, 'ему'),(1, 'ому'),(1, 'их'),(1, 'ых'),(1, 'ую'),(1, 'юю'),(1, 'ая'), 
     (1, 'яя'),(1, 'ою'),(1, 'ею'), 

     (2, 'ивш'),(2, 'ывш'),(2, 'ующ'),(2, 'ем'),(2, 'нн'),(2, 'вш'),(2, 'ющ'), 
     (2, 'щ'),(2, 'ущи'),(2, 'ющи'), (2, 'ящий'),(2, 'щих'),(2, 'щие'),

     (4, 'ила'), (4, 'ыла'), (4, 'ена'), (4, 'ейте'), (4, 'уйте'), (4, 'ите'), 
     (4, 'или'), (4, 'ыли'), (4, 'ей'),  (4, 'уй'), (4, 'ил'), (4, 'ыл'), 
     (4, 'им'), (4, 'ым'), (4, 'ен'), (4, 'ило'), (4, 'ыло'), (4, 'ено'), 
     (4, 'ят'), (4, 'ует'), (4, 'уют'), (4, 'ит'), (4, 'ыт'), (4, 'ены'), (4, 'ить'), 
     (4, 'ыть'), (4, 'ишь'), (4, 'ую'), (4, 'ю'), (4, 'ла'), (4, 'на'), (4, 'ете'), 
     (4, 'йте'), (4, 'ли'), (4, 'й'), (4, 'л'), (4, 'ем'), (4, 'н'), (4, 'ло'), (4, 'но'), 
     (4, 'ет'), (4, 'ют'), (4, 'ны'), (4, 'ть'), (4, 'ешь'), (4, 'нно'),

     (8, 'а'),(8, 'ев'),(8, 'ов'),(8, 'ие'),(8, 'ье'),(8, 'е'),(8, 'иями'), 
     (8, 'ями'),(8, 'ами'),(8, 'еи'),(8, 'ии'),(8, 'и'),(8, 'ией'), 
     (8, 'ей'),(8, 'ой'),(8, 'ий'),(8, 'й'),(8, 'иям'),(8, 'ям'),(8, 'ием'), 
     (8, 'ем'),(8, 'ам'),(8, 'ом'),(8, 'о'),(8, 'у'),(8, 'ах'),(8, 'иях'), 
     (8, 'ях'),(8, 'ы'),(8, 'ь'),(8, 'ию'),(8, 'ью'),(8, 'ю'),(8, 'ия'), 
     (8, 'ья'),(8, 'я'),(8, 'ок'), (8, 'мва'), (8, 'яна'), (8, 'ровать')
   ) t(mask, we)
 )
 select
  sum(a.mask) as mask
 from
  (select ltrim(rtrim(@word))) t(word) cross apply
  (
   select top (1) with ties mask from WordEndings where t.word like we order by row_number() over (partition by mask order by len(we) desc)
  ) a(mask) 
);
go

declare @t table (s varchar(100));
insert into @t
values
 ('Автоматический выключатель АП 50Б-3МТ'),
 ('Выключатель АП 50Б'),
 ('Выключатель автоматический серии АП-50Б');

select
 t.s, stuff(d.s, 1, 1, upper(left(d.s, 1)))
from
 @t t cross apply
 (
  select
   case when b.mask is not null then lower(a.value) else a.value end + ' '
  from
   string_split(t.s, ' ') a outer apply
   dbo.fnPartOfSpeech(a.value) b 
  order by
   case when b.mask = 8 and row_number() over (partition by case when b.mask = 8 then 1 else 0 end order by (select 1)) = 1 then 0 else 1 end,
   row_number() over (order by (select 1))
  for xml path(''), type
 ) c(x) cross apply
 (select c.x.value('.', 'varchar(100)')) d(s);
go

drop function dbo.fnPartOfSpeech;
go

...
Рейтинг: 0 / 0
01.09.2018, 20:46
    #39696706
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_CЗадача. Необходимо разбить строки и переместить имя существительное на первое место
(Первое слово с большой, второе слово /прилагательной/ с маленькой буквы)


Эта задача больше похожа на подзадачу какой-то другой проблемы. Если это так, может, сообщите основную задачу?
...
Рейтинг: 0 / 0
01.09.2018, 22:58
    #39696719
Bujhm_C
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
x1ca4064Bujhm_CЗадача. Необходимо разбить строки и переместить имя существительное на первое место
(Первое слово с большой, второе слово /прилагательной/ с маленькой буквы)


Эта задача больше похожа на подзадачу какой-то другой проблемы. Если это так, может, сообщите основную задачу?


Вы правы. Моя задача гораздо масштабнее. Если интересно, могу поделится. Есть набор записей, около 160 тыс. Это записи приобретенных ТМЦ в разное время. Иду от обратного- данные уже есть ,а порядка нет. Хочу создать отраслевой справочник оборудования и материалов предприятия. Структура следующая. Наименование, тип, модификация. Руками группировать не умно. Поэтому желание автоматизировать процесс.
...
Рейтинг: 0 / 0
02.09.2018, 00:15
    #39696734
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_C,

имо напишите на шарпе разборщик строк и окончаний в одном флаконе.
...
Рейтинг: 0 / 0
02.09.2018, 17:15
    #39696871
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Bujhm_C,

Боюсь, полностью автоматизировать этот процесс не получится (в свое время приходилось решать более простую задачу - сопоставление по наименованию двух справочников, решение получилось полуавтоматическим). Можно попробовать:
- Взять готовый справочник существительных
- Посмотреть статистику слов: существительных, особенно в фиксированной тематике, должно быть не очень много. Возможно, по этой статистике можно построить свой справочник существительных.
- Попробовать алгоритмы кластеризации, например, k-means с расстоянием Левенштейна. Вопрос о количестве кластеров нужно решить отдельно.

Сама задача интересная, удачи.
...
Рейтинг: 0 / 0
03.09.2018, 16:51
    #39697280
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача по перестановке слов в строке
Massa52msLex,
Если "Мороженное" приложить к мясу - то прилагательное. Если в стаканчике или на палочке - существительное :)

а учитывая, что такого слова нет - так вообще фантастика
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задача по перестановке слов в строке / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]