Что нового

[Массивы] Возможно ли сделать следующий анализ ? Или это из раздела фантастики ?

vaf

Новичок
Сообщения
186
Репутация
2
На входе:
абрикосами
абрикосовое
абрикосовый
абрикосы
ананасами
ананасовая
ананасово
ананасом
ананасы
апельсинами
апельсине
апельсиновая
апельсиново
апельсиновое
апельсиновой
апельсиновом
апельсиновые
апельсиновый
апельсиновым
апельсином
арахисовые
арахисовый
арахисовым
арахисом


На выходе:
абрикосами=абрикосы
абрикосовое=абрикосы
абрикосовый=абрикосы
абрикосы=абрикосы
ананасами=ананас
ананасовая=ананас
ананасово=ананас
ананасом=ананас
ананасы=ананас
апельсинами=апельсин
апельсине=апельсин
апельсиновая=апельсин
апельсиново=апельсин
апельсиновое=апельсин
апельсиновой=апельсин
апельсиновом=апельсин
апельсиновые=апельсин
апельсиновый=апельсин
апельсиновым=апельсин
апельсином=апельсин
арахисовые=арахис
арахисовый=арахис
арахисовым=арахис
арахисом=арахис

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

Futurebear

Знающий
Сообщения
29
Репутация
6
Код:
#include <Array.au3>
DIM $aArrayToSort[24]=["абрикосами","абрикосовое","абрикосовый","абрикосы","ананасами","ананасовая",""& _ 
				"ананасово","ананасом","ананасы","апельсинами","апельсине","апельсиновая","апельсиново",""& _ 
				"апельсиновое","апельсиновой","апельсиновом","апельсиновые","апельсиновый","апельсиновым",""& _ 
				"апельсином","арахисовые","арахисовый","арахисовым","арахисом"]
Dim $aFruts[4]=["абрикос","ананас","апельсин","арахис"]

For $i=0 to UBound($aArrayToSort)-1
	For $once_frut in $aFruts
		if StringInStr($aArrayToSort[$i],$once_frut)>0 Then $aArrayToSort[$i]=$aArrayToSort[$i]&"="&$once_frut
	Next
Next
_ArrayDisplay($aArrayToSort)
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
не совсем то. У вас
Dim $aFruts[4]=["абрикос","ананас","апельсин","арахис"]
т.е. уже известны. а мне наоборот это нужно определить. т.е. в вашем случае должен присутствовать только массив DIM $aArrayToSort[24]
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
vaf
AutoIt, как ЯП здесь ни при чем. У вас есть конкретный алгоритм определения совпадений?
"молоко" и "молоток" - они совпадают? Почему?
Постарайтесь сначала на бумажке набросать алгоритм. А скрипт потом написать будет не сложно.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
vaf,
Так должно работать только для слов, не оканчивающихся на аоеиыйям в именительном падеже.
Код:
#include <Array.au3>

Dim $aArray[24] = ['абрикосами', 'абрикосовое', 'абрикосовый', 'абрикосы', 'ананасами', 'ананасовая', '' & _
		'ананасово', 'ананасом', 'ананасы', 'апельсинами', 'апельсине', 'апельсиновая', 'апельсиново', '' & _
		'апельсиновое', 'апельсиновой', 'апельсиновом', 'апельсиновые', 'апельсиновый', 'апельсиновым', '' & _
		'апельсином', 'арахисовые', 'арахисовый', 'арахисовым', 'арахисом']
Dim $aSuffix[4] = ['ам', 'ов', 'ом']

For $i = 0 To UBound($aArray) - 1
	For $j = 0  To UBound($aSuffix) - 1
		$aArray[$i] = StringRegExpReplace($aArray[$i], '^(.+?)(\Q' & $aSuffix[$j] & '\E)[аоеиыйям]{0,2}$', '$1')
	Next
Next
$aArray = _ArrayUnique($aArray)
_ArrayDisplay($aArray)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Думаю так будет проще:

Код:
$sData = ClipGet() ;Тут читаем строки с буфера обмена (скопировано с темы на форуме)
$aData = StringSplit(StringStripCR($sData), @LF)
$sData = ''
$sSuffix = '(?:ам|ов|ом)'

For $i = 1 To $aData[0]
	$sData &= $aData[$i] & '=' & StringRegExpReplace($aData[$i], '(?si)(.*?)(' & $sSuffix & '?[аоеиыйям]{0,2})(?:\r\n|$)', '\1') & @CRLF
Next

ConsoleWrite($sData & @LF)
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
А можно ли результат занести в файл вида

абрикосами=абрикос
абрикосовое=абрикос
абрикосовый=абрикос
абрикосы=абрикос
ананасами=ананас
ананасовая=ананас
ананасово=ананас
ананасом=ананас
ананасы=ананас
апельсинами=апельсин
апельсине=апельсин
апельсиновая=апельсин
апельсиново=апельсин
апельсиновое=апельсин
 

Futurebear

Знающий
Сообщения
29
Репутация
6
Вы сравниваете фрукты, каждое слово будет содержать название фрукта?
Пример: яблокАМИ, яблочнОЕ яблочнЫЙ, яблокИ
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
Принцип таков. Поиск до первого изменения, т.е. дано
яблокАМИ, яблочнОЕ яблочнЫЙ, яблокИ
тут будет "ябло", а дальше я уже ручками, т.к. полностью конечно все сделать нельзя.
просто у меня большие файлы слов, все руками это долго. Хотя бы что то автоматизировать.
 

darkwhite

Знающий
Сообщения
129
Репутация
5
если до первого именения то C2H5OH был прав
молоток=молоток
молоко=молоток
помоему надо как раз рассматривать с конца ))
окончания суфиксы и т.д.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
vaf
Возможно ли сделать следующий анализ ? Или это из раздела фантастики ?
да возможно
Если мозг различает, значит это можно переложить на алгоритм. Скорее всего алгоритм будет приравниваться к алгоритму проверки орфографии. Все возможные слова без суфиксов и окончаний добавить в список и добавить список возможных суфиксов и окончаний. Вот тогда можно проводить анализ.
 

Andeangl

Новичок
Сообщения
62
Репутация
4
Мне кажется, что можно задать "корни" слов, по которым будет поиск, то есть эти самые "кокос", "ананас". Тогда при нахождении такого "корня" скрипт будет радоваться и отправлять его в соответствующий массив. По кол-ву заданных "корней" будет определяться кол-во ячеек в итоговом массиве (+1 ячейка на случай если останутся лишние слова)

Итог: потребуется функция сравнения, динамический массив, диалоговое окно, выводящее итоговый массив. Насколько я знаю, всё это вполне можно реализовать. К сожалению, мои познания в данном языке не позволяют мне написать пример, так что могу предложить только такой алгоритм =(
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
задумка классная. попробовать реализовать бы.
 
Верх