1

Тема: Зв'язок слів у реченні

Спочатку хотів викласти ідеї. Але я ж шукаю готові рішення. Розумніші за мій велосипед. Якщо їх не буде через кілька днів - доведеться викласти велосипед. Дано. Списки слів nouns.txt, verbs.txt, pronouns.txt, adverbs.txt, ajectives.txt, conjunctions.txt та списки закінчень (немає назв, немає списків). Програма може визначати до якого списку належить кожне слово в реченні. Знаючи категорію кожного слова і перевіряючи його закінчення, побудувати зв'язки між словами, щоб розбити речення на вирази. Тільки для української/російської мови.
Я довго тут писав, цілий день, але зрозумів наскільки це тупо і відправив тільки це.

2

Re: Зв'язок слів у реченні

Я так розумію, ви намагаєтеся наївно повторити синтаксичні структури московитського агента впливу Чомскі - при тому, що вже ніби точно відомо, що воно так не працює (хоча місцями і дуже схоже на те). Спробуйте для початку прочитати одну-дві книжки по вже зробленому, тоді вам одразу видно обмеження того, що робите ви.

Подякували: v0020021

3

Re: Зв'язок слів у реченні

Тоді як на вашу думку працює ШІ?

4

Re: Зв'язок слів у реченні

Здогадуюсь, що ви скажете, що це некоректне питання.
Як працює успішний ШІ - Google Gemini (раніше Bard), Chat GPT, hugging chat?
Я скачував offline chat gpt і він відповідає швидко. А якщо аналізувати кожне слово по словнику, це займе десь секунду на кожне слово. Він працює не так.

5

Re: Зв'язок слів у реченні

Є значно швидші методи пошуку по словнику (знову ж таки, вам катастрофічно бракує хоч якоїсь системності у знаннях), але згадані вами ШІ - це нейронні мережі (конкретніше, великі мовні моделі).

Подякували: v0020021

6

Re: Зв'язок слів у реченні

По тому опису ми вже зробили токенізатор - перетворення слів на цілі числа, щоб економити ресурси. https://replace.org.ua/topic/15682/. А швидше шукати мабуть не перебором, а по алфавіту.

7

Re: Зв'язок слів у реченні

Google Gemini видав що можна робити (ширше, ніж я думав, фантазії не вистачило)

Прихований текст

1. Лексичний аналіз:
Розбиття речення на токени (слова, розділові знаки, службові слова).
Лемматизація слів (приведення до початкової форми).
Визначення частини мови для кожного токена.
Визначення морфологічних характеристик слів (відмінок, число, рід, час, особа тощо).
2. Синтаксичний аналіз:

Визначення граматичної основи речення (підмета та присудка).
Визначення типів зв'язків між словами (узгодження, керування, прилягання).
Визначення синтаксичної функції кожного токена (підмет, присудок, додаток, обставина, означення).
Побудова синтаксичного дерева речення.
3. Семантичний аналіз:

Визначення семантичних ролей учасників речення (агент, пацієнс, інструмент тощо).
Визначення семантичних відношень між словами (синонімія, антонімія, гіперонімія, гіпонімія).
Визначення значення речення в цілому.
4. Прагматичний аналіз:

Визначення контексту речення (хто говорить, кому, з якою метою).
Визначення інтенцій мовця (ствердження, запитання, прохання, наказ тощо).
Визначення імплікатур речення (непрямих значень).
5. Додаткові можливості:

Визначення стилістичної забарвленості тексту.
Визначення емоційної тональності тексту.
Визначення жанру тексту.
Визначення фактів та думок у тексті.
Цей алгоритм може бути використаний для:

Аналізу текстів
Автоматичного генерування речень
Перекладу текстів
Навчання штучного інтелекту
Розробки систем машинного перекладу
Розробки чат-ботів
Аналізу соціальних мереж
Аналізу відгуків
**Важливо зазначити, що цей алгоритм є базовим і може бути доопрацьовано  **

Я даю одне речення і Google якось може видати по ньому купу таких даних, що я був би вченим і то не зробив такого

8

Re: Зв'язок слів у реченні

v002002 написав:

що я був би вченим і то не зробив такого

Читайте книжки.

9

Re: Зв'язок слів у реченні

У кожному реченні є дієслово. Мені здається, що треба спершу знайти дієслова, потім визначити іменники до яких вони відносяться. Я довго думав, але не можу придумати як. Доведеться робити все ж "нейромережу" для розуміння зв'язку слів у реченні. Тобто невелику нейромережу, на вході якої кілька речень з однаковими словами, однаковим сенсом і різними перестановками, а на виході одне середнє речення

10

Re: Зв'язок слів у реченні

v002002 написав:

У кожному реченні є дієслово.

Ви певні? Як щодо цих речень?

Подякували: v0020021

11

Re: Зв'язок слів у реченні

На це існують виключення

12

Re: Зв'язок слів у реченні

Ви хоча б статтю Вікі за посиланням спробували читати?

13

Re: Зв'язок слів у реченні

Так, я читав. Але я досі вважаю, що алгоритм перестановок слів у реченні існує, бо офлайн-нейромережі працюють у десятки разів повільніше за безкоштовний онлайн Chat GPT. Або ж це правда, що ШІ-чати створені виключно з метою військової розвідки та виробництва зброї (на що йде значна частина бюджету США) і ніхто крім США безкоштовних онлайн-ШІ-чатів поки що наче не робив.

14

Re: Зв'язок слів у реченні

v002002 написав:

На це існують виключення

Так! Цікаво. Якщо їх там не має, значить вони повинні там бути. І «базарити» він буде (і з ним потрібно), як майстер Йода!?
«Я великий страх у тобі відчуваю, Люк Скайвокер!»

15

Re: Зв'язок слів у реченні

З wiktionary я скачав поки що лише російські слова (українські не побачив сенсу, бо їх мало, а англійську я не знаю) і об'єднав їх у файли ajectives.html, nouns.html та verbs.html. Я качав це пів місяця, тому жаль якщо це лише для себе. 
https://drive.google.com/file/d/1FHAsGN … drive_link
https://drive.google.com/file/d/1zG5VHA … drive_link
https://drive.google.com/file/d/1N189cq … drive_link
Ці файли я звів до більш короткого вигляду (але ще не повністю тому не викладаю) і створив код для "парсінгу" кожної таблиці (для кожного слова) в окремий struct, але ще не допрацював його щоб викласти. Ці файли допоможуть поки що виправляти одруківки, визначати число, рід та відмінок слова (ці функції вже зробив поки тільки для іменників).
А знаючи число, рід, відмінок та інші параметри можна об'єднувати слова в реченні за однаковими числами, родами і відмінками. Це скачування виправило і проблему

koala написав:

Те, що ви робите - трохи безнадійно, якщо ви одразу суворо не обмежите список слів.

З теми "процентне співвідношення слів" в розділі С++.
І навіщо я це все розповідаю, витрачаючи час? Хочу переконати вас мабуть самому створити безкоштовний ШІ і дати мені посилання на скачування

16

Re: Зв'язок слів у реченні

Ті самі слова у більш зручному для "парсингу" вигляді і стиснені в zip 11.9MB:
https://drive.google.com/file/d/127WaTG … drive_link
Ніяк не можу створити чіткі правила за якими воно буде витягатися з html в struct. Більшість просто, тобто <tr></tr>, <td></td> але є дані і у <a></a> і не завжди, треба ділити файл на однакові за правилами написання підфайли, поки що поділив тільки за кількістю тегів <tr></tr> кодом

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct ss
{
    size_t pos;
    string sstr;
};
ss sub(string str, string beg, string end, size_t pos)
{
    ss ret;
    size_t pos1=str.find(beg, pos);
    if(pos1!=std::string::npos)
    {
        size_t pos2=str.find(end, pos1);
        if(pos2!=std::string::npos)
        {
            ret.sstr=str.substr(pos1, pos2-pos1+end.size());
            
        }
        ret.pos=pos2;
        return ret;
    }
    ret.pos = pos1;
    return ret;
}
string LoadFile(string FilePath) {
  ifstream infile(FilePath.c_str());
  if (!infile.is_open()) {
    cerr << "File\"" << FilePath << "\" not found." << endl;
    return "";
  }
  string content;
  string line;
  while (getline(infile, line)) {
    content += line + "\n";
  }
  infile.close();

  return content;
}
int main()
{
    string fromtable="<table>";
    string totable="</table>";
    string fromtr="<tr>";
    string totr="</tr>";
    ss op1, op2;
    op1.pos=0;
    op2.pos=0;
    cout << "Input File: ";
    string input_file_name;
    cin >> input_file_name;
    cout << "Output file name: ";
    string output_file_name;
    cin >> output_file_name;
    
    ofstream outfile(output_file_name.c_str());
    string str=LoadFile(input_file_name);
    int icount=0;
    while(op1.pos!=std::string::npos)
    {
        icount=0;
        op2.pos=0;
        op1=sub(str, fromtable, totable, op1.pos);
        cout << op1.pos << " from " << str.size() << endl;
        if(op1.pos!=std::string::npos) 
        {
            while(op2.pos!=std::string::npos)
            {
                op2=sub(op1.sstr, fromtr, totr, op2.pos);
                if(op2.pos!=std::string::npos) icount++;
            }
            if(icount==7) outfile << op1.sstr << endl;//7 замінити на кількість tr
        }
    }
    
    
    return 0;
}

Я міняв о́, а́, и́ і подібні на о,а,и (звичайні) і десь помилково замінив а́ на "и" чи щось таке, мені для експерименту цього поки досить, а вам треба буде самим розбивати файли з попереднього поста, заміняти букви і видаляти цифри, символи і посилання для скорочення обсягу

17

Re: Зв'язок слів у реченні

Я зіткнувся з випадками інтернет-хуліганства (приколізму) у wiktionary. Потрібно тепер завантажувати купу новинних та інших сайтів, видобувати з них html-файли, видобувати з файлів слова (видаляючи однакові слова у vector <string>), порівнювати отримані слова із "словниковими" і тільки якщо вони є, виписувати у окремий файл. Хоча все надто просто, я взяв би за такий словник $$$. Мабуть викладати більеш нічо не буду.