powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задача по перестановке слов в строке
20 сообщений из 20, страница 1 из 1
Задача по перестановке слов в строке
    #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
Задача по перестановке слов в строке
    #39696556
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, еще, это не фиксированные данные необходимо написать код для любого массива записей!
...
Рейтинг: 0 / 0
Задача по перестановке слов в строке
    #39696560
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... большая и маленькая буквы - это не проблема.

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

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

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

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

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


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

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

З.Ы. Не несите чушь, пожалуйста. Лингвистический анализ не имеет отношения к тематике данного форума.
...
Рейтинг: 0 / 0
Задача по перестановке слов в строке
    #39696684
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CА вычислить прилагательное ( по окончаниям), что действительно неподъемная задача?
Думаю вполне подъёмная. Оцените ведь, какие там у вас возможны окончания и сделайте простой вариант.
...
Рейтинг: 0 / 0
Задача по перестановке слов в строке
    #39696685
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lingvonet.html
Немного близко к теме...
...
Рейтинг: 0 / 0
Задача по перестановке слов в строке
    #39696687
Bujhm_C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Задача по перестановке слов в строке
    #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
Задача по перестановке слов в строке
    #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
Задача по перестановке слов в строке
    #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
Задача по перестановке слов в строке
    #39696706
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bujhm_CЗадача. Необходимо разбить строки и переместить имя существительное на первое место
(Первое слово с большой, второе слово /прилагательной/ с маленькой буквы)


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


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


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

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

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

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

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


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