Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #22531 > unrolled thread
| Started by | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| First post | 2019-01-29 11:27 +0100 |
| Last post | 2019-02-08 23:24 +0100 |
| Articles | 12 — 3 participants |
Back to article view | Back to it.comp.www.php
La logica dei simili e la loro relazione ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-01-29 11:27 +0100
Re: La logica dei simili e la loro relazione Alessandro Pellizzari <shuriken@amiran.it> - 2019-01-29 10:45 +0000
Re: La logica dei simili e la loro relazione ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-01-29 23:54 +0100
Re: La logica dei simili e la loro relazione bramante <bramante@yopmail.com> - 2019-01-31 07:35 +0100
Re: La logica dei simili e la loro relazione bramante <bramante@yopmail.com> - 2019-01-31 07:35 +0100
Re: La logica dei simili e la loro relazione ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-01-31 09:38 +0100
Re: La logica dei simili e la loro relazione bramante <bramante@yopmail.com> - 2019-02-01 21:33 +0100
Re: La logica dei simili e la loro relazione bramante <bramante@yopmail.com> - 2019-02-01 22:05 +0100
Re: La logica dei simili e la loro relazione ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-02-02 11:57 +0100
Re: La logica dei simili e la loro relazione ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-02-02 12:08 +0100
Re: La logica dei simili e la loro relazione bramante <bramante@yopmail.com> - 2019-02-02 19:00 +0100
Re: La logica dei simili e la loro relazione ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-02-08 23:24 +0100
| From | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| Date | 2019-01-29 11:27 +0100 |
| Subject | La logica dei simili e la loro relazione |
| Message-ID | <q2p9q0$q0j$1@gioia.aioe.org> |
Salve, sono incuriosito dal funzionamento dei social e da come riescano ad esempio con dati simili a mettere in connessione gli utenti "simili"! Partendo da MySQL/MariaDB ipotizziamo un social in cui ci siano gli utenti e le loro abitudini: abitudini ------------------- id_abitudini (autoincrement) nome_abitudine tabella user ----------------- id_user (autoincrement) name FK_id_abitudini match -------------------------- id_match (autoincrement) FK_id_abitudini FK_id_user FK_id_user Come avete visto ogni abitudine ha un suo id quindi giocando su questo valore numerico già presente si potrebbe dire che l'utente tizio ha tra le sue abitudini i numeri 2-4-7-3-1-9 e l'utente caio ha 2-7-3 Forse prima del match tra utenti occorre un'altra tabella specifica che memorizzi tutte le abitudini per ogni utente per poi metterle in relazione nella tabella match? Saluti. ^Bart
[toc] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-01-29 10:45 +0000 |
| Message-ID | <gbap6mFu4trU1@mid.individual.net> |
| In reply to | #22531 |
On 29/01/2019 10:27, ^Bart wrote: > sono incuriosito dal funzionamento dei social e da come riescano ad > esempio con dati simili a mettere in connessione gli utenti "simili"! > > Partendo da MySQL/MariaDB ipotizziamo un social in cui ci siano gli > utenti e le loro abitudini: Solitamente questo tipo di associazioni vengono fatte tramire graph DBs e (a volte) algoritmi di machine learning. Puoi fare qualcosa di approssimato con MySQL. Per esempio con una tabella utente<->interesse, per poi trovare tutti gli utenti con lo stesso interesse o, a partire da un utente, prendi la sua lista di interessi e trovi quali altri utenti hanno gli stessi interessi, ordinandoli per quanti interessi ci sono in comune, ecc. ecc. ecc. Elasticsearch potrebbe rendere la cosa più semplice in alcuni casi, ma anche lui è una "pezza". Dovrai comunque trovare un modo per: - distinguere gli interessi simili ma in campi diversi - trovare i sinonimi per gli interessi - normalizzare gli interessi (per esempio tra lingue diverse) - ricavare gli interessi da quello che la gente fa (like, condivisioni, ecc.). Questo di solito viene fatto con machine learning. Bye.
[toc] | [prev] | [next] | [standalone]
| From | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| Date | 2019-01-29 23:54 +0100 |
| Message-ID | <q2qlid$18v8$1@gioia.aioe.org> |
| In reply to | #22533 |
> Solitamente questo tipo di associazioni vengono fatte tramire graph DBs > e (a volte) algoritmi di machine learning. Ho cercato in rete e diciamo che per ora non sono capace di tanto! :) > Puoi fare qualcosa di approssimato con MySQL. Per esempio con una > tabella utente<->interesse, per poi trovare tutti gli utenti con lo > stesso interesse o, a partire da un utente, prendi la sua lista di > interessi e trovi quali altri utenti hanno gli stessi interessi, > ordinandoli per quanti interessi ci sono in comune, ecc. ecc. ecc. Io pensavo di popolare con una query da eseguire in maniera schedulata tipo ogni ora (non mi interessa il tempo reale!) in modo che vada a pescare gli interessi di ogni utente e li memorizzi nella tabella match in cui avrei: match ------------------------ id utente lista_numerica_interessi A questo punto con una query si potrebbero confrontare gli interessi del singolo utente con tutti quelli degli altri! > Elasticsearch potrebbe rendere la cosa più semplice in alcuni casi, ma > anche lui è una "pezza". Anche qui c'è tanto da "studiare": https://qbox.io/blog/what-is-elasticsearch ed ora devo affrontare Python, Arduino, SQL, Inventor e qualcosa sui PLC giusto per non annoiarsi! :) > Dovrai comunque trovare un modo per: > > - distinguere gli interessi simili ma in campi diversi Gli interessi sono tutti già inseriti, l'utente finale può scegliere solo tra quelli proposti! > - trovare i sinonimi per gli interessi Come sopra, se c'è necessità di aggiungere altri interessi si chiede all'admin. > - normalizzare gli interessi (per esempio tra lingue diverse) Per il discorso di sopra parto da una tabella inglese e poi linko quelle delle altre lingue. > - ricavare gli interessi da quello che la gente fa (like, condivisioni, > ecc.). Questo di solito viene fatto con machine learning. E' molto più semplice tipo, compro i bucatini barilla o i biscotti galbusera questi hanno il loro id numerico e tutto il resto quindi vien da se! :) > Bye. Saluti e grazie per tutte le informazioni! :) ^Bart
[toc] | [prev] | [next] | [standalone]
| From | bramante <bramante@yopmail.com> |
|---|---|
| Date | 2019-01-31 07:35 +0100 |
| Message-ID | <q2u4up$ucm$1@gioia.aioe.org> |
| In reply to | #22531 |
Il 29/01/19 11:27, ^Bart ha scritto:
> Salve,
>
> sono incuriosito dal funzionamento dei social e da come riescano ad
> esempio con dati simili a mettere in connessione gli utenti "simili"!
>
> Partendo da MySQL/MariaDB ipotizziamo un social in cui ci siano gli
> utenti e le loro abitudini:
>
> abitudini
> -------------------
> id_abitudini (autoincrement)
> nome_abitudine
>
> tabella user
> -----------------
> id_user (autoincrement)
> name
> FK_id_abitudini
>
> match
> --------------------------
> id_match (autoincrement)
> FK_id_abitudini
> FK_id_user
> FK_id_user
>
> Come avete visto ogni abitudine ha un suo id quindi giocando su questo
> valore numerico già presente si potrebbe dire che l'utente tizio ha tra
> le sue abitudini i numeri 2-4-7-3-1-9 e l'utente caio ha 2-7-3
>
> Forse prima del match tra utenti occorre un'altra tabella specifica che
> memorizzi tutte le abitudini per ogni utente per poi metterle in
> relazione nella tabella match?
>
> Saluti.
> ^Bart
abitudini
-------------------
id_abitudini (autoincrement)
nome_abitudine
tabella user
-----------------
id_user (autoincrement)
name
FK_id_abitudini
tabella abitutini_utente
-----------------
id_user
id_abitudini
Utenti 1:N
abitudini 1:N
abitutini_utente N.N
per estrarre le abitutidi degli utenti:
select a.name,
, b.nome_abitudine
from user a
, abitudini b
, abitutini_utente c
where a.id_user = c.id_user
and b.id_abitudini = c.id_abitudini
estrarre tutti gli utenti con un abitudine in comune
select a.name,
from user a
, abitudini b
, abitutini_utente c
where a.id_user = c.id_user
and b.id_abitudini = c.id_abitudini
and b.id_abitudini in (:LISTA_ABITUDINI_SEPARATI_DA_VIRGOLA)
Ciao
[toc] | [prev] | [next] | [standalone]
| From | bramante <bramante@yopmail.com> |
|---|---|
| Date | 2019-01-31 07:35 +0100 |
| Message-ID | <q2u4vk$ucm$2@gioia.aioe.org> |
| In reply to | #22539 |
Il 31/01/19 07:35, bramante ha scritto: > Il 29/01/19 11:27, ^Bart ha scritto: >> Salve, >> >> sono incuriosito dal funzionamento dei social e da come riescano ad >> esempio con dati simili a mettere in connessione gli utenti "simili"! >> >> Partendo da MySQL/MariaDB ipotizziamo un social in cui ci siano gli >> utenti e le loro abitudini: >> >> abitudini >> ------------------- >> id_abitudini (autoincrement) >> nome_abitudine >> >> tabella user >> ----------------- >> id_user (autoincrement) >> name >> FK_id_abitudini >> >> match >> -------------------------- >> id_match (autoincrement) >> FK_id_abitudini >> FK_id_user >> FK_id_user >> >> Come avete visto ogni abitudine ha un suo id quindi giocando su questo >> valore numerico già presente si potrebbe dire che l'utente tizio ha >> tra le sue abitudini i numeri 2-4-7-3-1-9 e l'utente caio ha 2-7-3 >> >> Forse prima del match tra utenti occorre un'altra tabella specifica >> che memorizzi tutte le abitudini per ogni utente per poi metterle in >> relazione nella tabella match? >> >> Saluti. >> ^Bart > > > abitudini > ------------------- > id_abitudini (autoincrement) > nome_abitudine > > tabella user > ----------------- > id_user (autoincrement) > name > > > tabella abitutini_utente > ----------------- > id_user > id_abitudini > > > Utenti 1:N > abitudini 1:N > abitutini_utente N.N > > > per estrarre le abitutidi degli utenti: > select a.name, > , b.nome_abitudine > from user a > , abitudini b > , abitutini_utente c > where a.id_user = c.id_user > and b.id_abitudini = c.id_abitudini > > > estrarre tutti gli utenti con un abitudine in comune > select a.name, > from user a > , abitudini b > , abitutini_utente c > where a.id_user = c.id_user > and b.id_abitudini = c.id_abitudini > and b.id_abitudini in (:LISTA_ABITUDINI_SEPARATI_DA_VIRGOLA) > > Ciao
[toc] | [prev] | [next] | [standalone]
| From | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| Date | 2019-01-31 09:38 +0100 |
| Message-ID | <q2uc6i$1u6s$1@gioia.aioe.org> |
| In reply to | #22539 |
> Utenti 1:N > abitudini 1:N > abitutini_utente N.N Ok. > per estrarre le abitutidi degli utenti: > select a.name, > , b.nome_abitudine > from user a > , abitudini b > , abitutini_utente c > where a.id_user = c.id_user > and b.id_abitudini = c.id_abitudini Ok. > estrarre tutti gli utenti con un abitudine in comune > select a.name, > from user a > , abitudini b > , abitutini_utente c > where a.id_user = c.id_user > and b.id_abitudini = c.id_abitudini > and b.id_abitudini in (:LISTA_ABITUDINI_SEPARATI_DA_VIRGOLA) Le ultime due righe non le ho capite o meglio la penultima fa il match nel caso le abitudini siano identiche, nell'ultima verifica "solo" che ci siano delle abitudini nella lista delle abitudini, diciamo che poi bisognerà lavorare tipo con delle variabili per definire l'incidenza delle abitudini comuni tipo 70% di compatibilità, 50%, oppure totalmente l'opposto quindi 0%. > Ciao Saluti e grazie per la risposta! :) ^Bart
[toc] | [prev] | [next] | [standalone]
| From | bramante <bramante@yopmail.com> |
|---|---|
| Date | 2019-02-01 21:33 +0100 |
| Message-ID | <q32afe$441$1@gioia.aioe.org> |
| In reply to | #22541 |
Il 31/01/19 09:38, ^Bart ha scritto: > >> estrarre tutti gli utenti con un abitudine in comune >> select a.name, >> from user a >> , abitudini b >> , abitutini_utente c >> where a.id_user = c.id_user >> and b.id_abitudini = c.id_abitudini >> and b.id_abitudini in (:LISTA_ABITUDINI_SEPARATI_DA_VIRGOLA) > > Le ultime due righe non le ho capite o meglio la penultima fa il match > nel caso le abitudini siano identiche, nell'ultima verifica "solo" che > ci siano delle abitudini nella lista delle abitudini, diciamo che poi > bisognerà lavorare tipo con delle variabili per definire l'incidenza > delle abitudini comuni tipo 70% di compatibilità, 50%, oppure totalmente > l'opposto quindi 0%. > >> Ciao > > Saluti e grazie per la risposta! :) > ^Bart con l'ultima riga si indica un sottoinsieme delle abitudini che ti interessa estrarre. se la tua idea è quella di capire il grado di compatibilità di 2 persone in base alla percentuale degli interessi in comune, la query diventa abbastanza corposa dovresti estrarre tutte le abitudine della persona "a", tutte le abitudini della persona "b", creare una lista unica delle due abitudini) e fare una proporzione delle abitudini in comune. faccio un esempio passioni persona a correre passeggiare guardare film leggere modellismo passioni persona b viaggiare leggere dormire correre lista passioni totali (lista unica 100% 7 elementi) correre viaggiare leggere dormire passeggiare guardare film modellismo passioni in comune (2 elementi) correre leggere proporzione 100:7=X:2 percentuale passioni compatibili 100*2/7=28,57% questo potrebbe essere uno dei tanti modi (dipende dal tipo di dato che si ha a disposizione o da quello che si cerca di analizzare) l'esempio di cui sopra è fattibile con un unica query. Ciao
[toc] | [prev] | [next] | [standalone]
| From | bramante <bramante@yopmail.com> |
|---|---|
| Date | 2019-02-01 22:05 +0100 |
| Message-ID | <q32cb7$ckk$1@gioia.aioe.org> |
| In reply to | #22542 |
Il 01/02/19 21:33, bramante ha scritto: > Il 31/01/19 09:38, ^Bart ha scritto: > >> >>> estrarre tutti gli utenti con un abitudine in comune >>> select a.name, >>> from user a >>> , abitudini b >>> , abitutini_utente c >>> where a.id_user = c.id_user >>> and b.id_abitudini = c.id_abitudini >>> and b.id_abitudini in (:LISTA_ABITUDINI_SEPARATI_DA_VIRGOLA) >> >> Le ultime due righe non le ho capite o meglio la penultima fa il match >> nel caso le abitudini siano identiche, nell'ultima verifica "solo" che >> ci siano delle abitudini nella lista delle abitudini, diciamo che poi >> bisognerà lavorare tipo con delle variabili per definire l'incidenza >> delle abitudini comuni tipo 70% di compatibilità, 50%, oppure >> totalmente l'opposto quindi 0%. >> >>> Ciao >> >> Saluti e grazie per la risposta! :) >> ^Bart > > con l'ultima riga si indica un sottoinsieme delle abitudini che ti > interessa estrarre. > > se la tua idea è quella di capire il grado di compatibilità di 2 persone > in base alla percentuale degli interessi in comune, la query diventa > abbastanza corposa > dovresti estrarre tutte le abitudine della persona "a", tutte le > abitudini della persona "b", creare una lista unica delle due abitudini) > e fare una proporzione delle abitudini in comune. > > faccio un esempio > > passioni persona a > correre > passeggiare > guardare film > leggere > modellismo > > passioni persona b > viaggiare > leggere > dormire > correre > > lista passioni totali (lista unica 100% 7 elementi) > correre > viaggiare > leggere > dormire > passeggiare > guardare film > modellismo > > passioni in comune (2 elementi) > correre > leggere > > proporzione > 100:7=X:2 > > percentuale passioni compatibili > 100*2/7=28,57% > > > questo potrebbe essere uno dei tanti modi (dipende dal tipo di dato che > si ha a disposizione o da quello che si cerca di analizzare) > > l'esempio di cui sopra è fattibile con un unica query. > > Ciao P.S. l'esempio fatto è in valori assoluti ma ad esempio la persona "a" ha una compatibilità del 40% rispetto "b" mentre la persona "b" del 50% rispetto ad "a" percentuale compatibilità persona a su b 100*2/5=40% percentuale compatibilità persona b su a 100*2/4=50% Ciao
[toc] | [prev] | [next] | [standalone]
| From | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| Date | 2019-02-02 11:57 +0100 |
| Message-ID | <q33t21$sqm$2@gioia.aioe.org> |
| In reply to | #22543 |
> P.S. > l'esempio fatto è in valori assoluti > > ma ad esempio la persona "a" ha una compatibilità del 40% rispetto "b" > mentre la persona "b" del 50% rispetto ad "a" > > percentuale compatibilità persona a su b > 100*2/5=40% > > percentuale compatibilità persona b su a > 100*2/4=50% Mi ritaglio il weekend per digerire il tutto, comunque sei stato chiaro negli esempi! > Ciao Saluti! ^Bart
[toc] | [prev] | [next] | [standalone]
| From | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| Date | 2019-02-02 12:08 +0100 |
| Message-ID | <q33tmt$10n0$1@gioia.aioe.org> |
| In reply to | #22542 |
> faccio un esempio > > passioni persona a > correre > passeggiare > guardare film > leggere > modellismo > > passioni persona b > viaggiare > leggere > dormire > correre Praticamente avrei un'unica tabella in cui inserire i vari utenti con la lista delle loro passioni: passioni_utenti ----------------------- ID FK_user FK_passioni > lista passioni totali (lista unica 100% 7 elementi) > correre > viaggiare > leggere > dormire > passeggiare > guardare film > modellismo C'è già una tabella con la lista degli utenti ed un'altra con la lista delle passioni quindi quella che tu mi scrivi già c'è! :) > passioni in comune (2 elementi) > correre > leggere > > proporzione > 100:7=X:2 > > percentuale passioni compatibili > 100*2/7=28,57% Questa sarebbe "solo" una query che confronterebbe l'utente con gli altri utenti giusto? > l'esempio di cui sopra è fattibile con un unica query. Ah ok, però ovviamente occorrono almeno tre tabelle ovvero una user, una passioni ed una che colleghi user e passioni sulla quale agire con la query per mostrare il risultato! > Ciao Saluti! ^Bart
[toc] | [prev] | [next] | [standalone]
| From | bramante <bramante@yopmail.com> |
|---|---|
| Date | 2019-02-02 19:00 +0100 |
| Message-ID | <q34lsp$ga2$1@gioia.aioe.org> |
| In reply to | #22545 |
Il 02/02/19 12:08, ^Bart ha scritto:
>> faccio un esempio
>>
>> passioni persona a
>> correre
>> passeggiare
>> guardare film
>> leggere
>> modellismo
>>
>> passioni persona b
>> viaggiare
>> leggere
>> dormire
>> correre
>
> Praticamente avrei un'unica tabella in cui inserire i vari utenti con la
> lista delle loro passioni:
>
> passioni_utenti
> -----------------------
> ID
> FK_user
> FK_passioni
si, ID non serve a nulla
FK_user | FK_passioni
---------------------
1 | 1
1 | 3
1 | 7
1 | 8
2 | 1
2 | 2
2 | 4
2 | 5
2 | 7
3 | 4
3 | 6
3 | 9
ecc..
>
>> lista passioni totali (lista unica 100% 7 elementi)
>> correre
>> viaggiare
>> leggere
>> dormire
>> passeggiare
>> guardare film
>> modellismo
>
> C'è già una tabella con la lista degli utenti ed un'altra con la lista
> delle passioni quindi quella che tu mi scrivi già c'è! :)
>
la devi estrarre, la lista che hai è una tabella delle passioni (statica
elenco passioni), in questo caso devi fare una lista delle sole passioni
di a e b
select distinct a.fk_passioni, a.descrizione_passione
from passioni a
, abitutini_utente b
where b.id_user in (utente_A, utente_b)
and a.fk_passioni = b.fk_passioni
>> passioni in comune (2 elementi)
>> correre
>> leggere
>>
>> proporzione
>> 100:7=X:2
>>
>> percentuale passioni compatibili
>> 100*2/7=28,57%
>
> Questa sarebbe "solo" una query che confronterebbe l'utente con gli
> altri utenti giusto?
>
si
>> l'esempio di cui sopra è fattibile con un unica query.
>
> Ah ok, però ovviamente occorrono almeno tre tabelle ovvero una user, una
> passioni ed una che colleghi user e passioni sulla quale agire con la
> query per mostrare il risultato!
>
parti dalle 3 tabelle e crei dei semi lavorati che dai impasto ad una
query superiore
non so quanto conosci sql, ma in questo caso se vuoi risolvere tutto con
un unica query, diventa una query con 3 o piu subquery.
altrimenti puoi lavorare con php o con qualsiasi altro linguaggio per
arrivare allo stesso risultato.
[toc] | [prev] | [next] | [standalone]
| From | ^Bart <gabriele1NOSPAM@hotmail.com> |
|---|---|
| Date | 2019-02-08 23:24 +0100 |
| Message-ID | <q3kvim$1i21$1@gioia.aioe.org> |
| In reply to | #22546 |
> parti dalle 3 tabelle e crei dei semi lavorati che dai impasto ad una > query superiore > non so quanto conosci sql, ma in questo caso se vuoi risolvere tutto con > un unica query, diventa una query con 3 o piu subquery. > altrimenti puoi lavorare con php o con qualsiasi altro linguaggio per > arrivare allo stesso risultato. > Anche se in ritardo ti ringrazio per tutte le dritte! :) Saluti. ^Bart
[toc] | [prev] | [standalone]
Back to top | Article view | it.comp.www.php
csiph-web