360° fotografie pro Váš Eshop z Vaší vlastní fotokomory. Ušetřete, foťte a upravujte 360° obrázky IN-HOUSE
Zobrazují se odpovědi 1 až 5 z 5

Určení fráze společné všem prvkům pole

  1. Zdravím a potřeboval bych poradit s menším zádrhelem:

    Mám pole, které obsahuje podobné texty. Např.

    Kód:
    Hadice tlaková
    Hadice tlaková 1/2
    Tlaková hadice 566789
    Tlaková hadice 577898
    Tlaková silná hadice 45677
    atd ...

    Nebo:
    Kód:
    Elektrolytický kondenzátor nippon 47uF 100V
    Elektrolitycký kondenzátor nippon 1000uF 35V
    Elektrolitycký kondenzátor nippon 9767898 4700uF/25V
    Elektrolitycký kondenzátor nippon 567788
    5667 1000uF 25V Elektrolitycký kondenzátor nippon 
    220uF50V Elektrolitycký kondenzátor nippon
    atd ....

    a chtěl bych z toho dostat frázi, která je společná všem prvkům. V tomto případě by to byla fráze " tlaková hadice" a "elektrolitycký kondenzátor nippon" tuto frázi ale předem neznám. A nevím ani jak bude dlouhá. Jak by jste na to šli?
    Díky za nakopnutí.

  2. Co se právě děje na Webtrhu?
  3. Každou větu rozdělit na slova podle mezer, slova vložit do pole a udělat si ještě na každém slovu příznak "obsahuje". Projet všechny věty navzájem a nastavit příznak (non case sensitive porovnání). Ze slov s příznakem "obsahuje" udělat frázi.

  4. prebehni si vsetky retazce cez transliteraciu do asci, idealne bez interpunkcie.
    sprav foreach pre kazdy zaznam, splitni to na medzerach a ziskaj pre kazde slovo zaciatocnu a konecnu poziciu v stirngu. cize ak mas "abcd efgh jklmn" tak pre abcd to bude 0,3, pre efgh to bude 5,8 a td. potom si sprav zase slucku pre kazdy zaznam a ignoruj ten akitvny, samozrejme.
    nasledne pre kazde slovo ktore mas zacni kontorlovat ci retazec obsahuje to slovo, ak ano tak zacni pridavat k tym poziciam -1 a +1, podla toho vytiahni susedny znak z originalneho retazca a znovu porovnaj az kym sa nezaseknes na oboch stranach alebo nenarazis na zaciatok alebo koniec aktivneho stringu. niekam si zapis zhodny retazec, jeho dlzku a deltu/index zaznamu ktory ho obsahoval.
    na koniec si usporiadaj najdene zhody podla dlzky a podla poctu zhod, to uz je na tebe ktore prioritizujes.

    ak nie je jasne co pisem tak nevadi lebo je pol noc a nechce sa mi to inak rozpisovat.

  5. řada běžných algoritmů pro texty je popsaná na http://www.512.cz/index.php?title=Al..._použit%C3%AD

    Pro tebe je asi nejjednodušší si dát řetězce do pole, seřadit je podle abecedy, vzít první a poslední rětězec, poslední projít po písmenech a zastavit se až písmena přestanou být shodná s těmi na stejné pozici u prvního řetězce v seřazeném poli.

    Porovnávat musíš bez ohledu na velikosti písmen. Pokud chceš sadu rětězců sdružit podle jejich společných prefixů, algoritmus by byl složitější, musel bys si pamatovat nejdelší prefix, posunout se na další slovo a poté sdružit slova. Už by se jednalo o NP-problém a složitost by šla exponenciálně nahoru.

  6. Takže díky všem, snad vyřešeno, koho by to zajímalo tak asi takto:

    použil jsem nakonec sphinx + sphinx api pro php, ten mi tam už běžel (index aby se nepřetěžovala db, něco jako elasticsearch) a pak nad výsledkem funkci similar_text https://www.php.net/manual/en/function.similar-text.php

    pak pár foreachů a ještě dynamické nastavení po kolika slovech to probublává podle velikosti výsledku.

    Překvapivě to je docela rychlé, teď ještě testuji omezení různých znaků a nastavení vah....

Hostujeme u Server powered by TELE3