Marcin Drechna

Marcin Drechna
www.marcindrechna.co
m

Temat: Automatyczna zamiana tekstu na linki

Cześć !

Możecie poradzić jak rozwiązać następujący problem. Mam bazę imion i nazwisk, chciałbym aby np. jak w newsie piszę imię i nazwisko, które jest w bazie danych automatycznie zostało zamieniane na link właśnie do danych z tej drugiej tabeli.

Aby jaśniej to zobrazować to np.

Piszę newsa, a w nim pojawia się imię i nazwisko Cristiano Ronaldo. Jeśli w tej bazie imion i nazwisk jest Cristiano Ronaldo to automatycznie tworzy mi się link do jego opisu.

Pozdrawiam
Marcin
Marcin Tarapata

Marcin Tarapata Analityk/Tester

Temat: Automatyczna zamiana tekstu na linki

Najprościej to tekst przepuść przez preg_replace oraz wykorzystaj pętle while...

Oczywiście pewnie da się to zrobić bardziej optymalnie ;)
Mariusz Wacławiak

Mariusz Wacławiak FOTOlinea fotografia
ślubna - właściciel

Temat: Automatyczna zamiana tekstu na linki

słowo "bardziej optymalnie" nie istnieje, jest to błąd logiczny w stylu cofanie sie do tyłu.
Optymalne jest juz na tyle optymalne ze nie da sie byc juz bardziej ;]
Adam W.

Adam W. senior php
developer, Symfony

Temat: Automatyczna zamiana tekstu na linki

Marcin D.:
Cześć !

Możecie poradzić jak rozwiązać następujący problem. Mam bazę imion i nazwisk, chciałbym aby np. jak w newsie piszę imię i nazwisko, które jest w bazie danych automatycznie zostało zamieniane na link właśnie do danych z tej drugiej tabeli.

Aby jaśniej to zobrazować to np.

Piszę newsa, a w nim pojawia się imię i nazwisko Cristiano Ronaldo. Jeśli w tej bazie imion i nazwisk jest Cristiano Ronaldo to automatycznie tworzy mi się link do jego opisu.

ale jak Ty to widzisz? każde słowo sprawdzane jest pod kątem tego czy to jest imię i nazwisko? każde słowo wpisane ma być sprawdzone w bazie? a raczej każda para słów. tak z automatu to może być ciężko.
może już łatwiej byłoby gdybyś zaznaczył te 2 słowa i wybrał opcję utwórz link - wtedy przeszukuje bazę pod kątem wskazanej frazy.
Tomasz O.

Tomasz O. Linux Engineer, team
lead

Temat: Automatyczna zamiana tekstu na linki

Adam W.:
ale jak Ty to widzisz? każde słowo sprawdzane jest pod kątem tego czy to jest imię i nazwisko? każde słowo wpisane ma być sprawdzone w bazie? a raczej każda para słów. tak z automatu to może być ciężko.
może już łatwiej byłoby gdybyś zaznaczył te 2 słowa i wybrał opcję utwórz link - wtedy przeszukuje bazę pod kątem wskazanej frazy.

Starczy potraktowac całośc jako fraze - znacznie uprosci sprawe. Jednak przeszukanie notki przy duzej ilosci fraz bedzie bolało.

Dlatego też myślę, że warto by wymusic na piszących tagowanie np *Cristiano Ronaldo* i potem parser sprawdzałby tylko frazy wewnątrz gwiazdek :)
Mariusz W.:
słowo "bardziej optymalnie" nie istnieje

Owszem, bo to nie słowo, a związek frazeologiczny (jak już się czepiac ;) )Tomasz Oleksa edytował(a) ten post dnia 16.04.09 o godzinie 14:19
Adam W.

Adam W. senior php
developer, Symfony

Temat: Automatyczna zamiana tekstu na linki

Tomasz Oleksa:
Starczy potraktowac całośc jako fraze - znacznie uprosci sprawe.

całość jako frazę i co wtedy? w zapytaniu do bazy poszukującym osoby o imieniu i nazwisku wrzucić tą całą frazę? trochę nie rozumiem.
Jednak przeszukanie notki przy duzej ilosci fraz bedzie bolało.

Dlatego też myślę, że warto by wymusic na piszących tagowanie np *Cristiano Ronaldo* i potem parser sprawdzałby tylko frazy wewnątrz gwiazdek :)

właśnie o to mi chodzi;)
w edytorze WYSWYIG jakoś oznaczyć frazę, żeby później można było sprawdzić tylko tą frazę.

konto usunięte

Temat: Automatyczna zamiana tekstu na linki

ja to widze w ten sposob:
wybierasz z tabeli z nazwiskami wszystkie osoby, nastepnie po kolei dla kazdego nazwiska jedziesz po tekście preg_replacem i zamieniasz na linki ;)
Adam W.

Adam W. senior php
developer, Symfony

Temat: Automatyczna zamiana tekstu na linki

Kuba Świegot:
ja to widze w ten sposob:
wybierasz z tabeli z nazwiskami wszystkie osoby, nastepnie po kolei dla kazdego nazwiska jedziesz po tekście preg_replacem i zamieniasz na linki ;)

a to jeszcze zależy od tego ile osób jest w bazie, jak często występują w tekście, jak często będą się zdarzać teksty gdzie takie zamiany będą możliwe.
jak będzie nazwisk milion pięćset to bardzo zły pomysł.
Marcin Drechna

Marcin Drechna
www.marcindrechna.co
m

Temat: Automatyczna zamiana tekstu na linki

O to chodzi, że lista imion i nazwisk jest dość duża i cały czas się powiększa :/
Maciej M.

Maciej M. Advanced Software
Engineer

Temat: Automatyczna zamiana tekstu na linki

1. Baza powinna mieć indeksy tekstowe
2. Podejscie do problemu: czy analiza ma być pod czas pisania newsa czy dopiero przy zapisywaniu newsa (jest to istotne- bo pod czas pisania do analizy bedziemy wysylać wspierając się np ajaxem, jedynie ostatnie 1,2 wyrazy)
3. czy imie i nazwisko jest w bazie w jednym czy w osobnych polach - moze to determinować podejscie do problemu.
4. Tokenizacja tekstu po białych znakach,w którym wyszukujemy konkretnej frazy (news raczej nie będzie epopeją), usuwamy słowa krótsze niż 1, 2, 3 ... znaki (to można obliczyć wg najktórszego imienia/nazwiska w bazie)
5. przesuwając się w tablicy tokenów konkatenując po dwa elementy (imie+nazwisko - bezpośrednio po sobie następujące), lub wyszukując po jednym elemencie imie lub nazwisko,
w sql korzystając z mechanizmów wyszukiwania po FULLTEXT indexach czyli match itd...

Powodzenia.
Problem nie jest aż tak skomplikowany jak się wydaje, nie ma po co go demonizować :)

konto usunięte

Temat: Automatyczna zamiana tekstu na linki

Maciej Marszałek:
5. przesuwając się w tablicy tokenów konkatenując po dwa elementy (imie+nazwisko - bezpośrednio po sobie następujące), lub wyszukując po jednym elemencie imie lub nazwisko,
w sql korzystając z mechanizmów wyszukiwania po FULLTEXT indexach czyli match itd...

A jak byś rozwiązał problem deklinacji w języku polskim?
Maciej M.

Maciej M. Advanced Software
Engineer

Temat: Automatyczna zamiana tekstu na linki

Problem nieco bardziej złożony (takie tajemnice np Google dobrze strzeże), ale mysle ze posiłkując się RegExp w MySql (http://www.webdeveloper.pl/manual_mysql/show.php?str=m... a nawet tylko możliwościami match (zwracanie fraz najlepiej dopasowanych) też w jakiś sposób rozwiązuje problem deklinacji i może dawać stosunkowo dobre wyniki.

A jak ktoś poważniej podchodzi do problemów wyszukiwania w bazach danych to za pewne słyszał o możliwościach Sphinxa (http://www.sphinxsearch.com/) ale to już temat do własnego rozpoznania.
Jarosław Lisicki

Jarosław Lisicki programista,
Gadu-Gadu

Temat: Automatyczna zamiana tekstu na linki

Maciej Marszałek:
1. Baza powinna mieć indeksy tekstowe
2. Podejscie do problemu: czy analiza ma być pod czas pisania newsa czy dopiero przy zapisywaniu newsa (jest to istotne- bo pod czas pisania do analizy bedziemy wysylać wspierając się np ajaxem, jedynie ostatnie 1,2 wyrazy)

A jest jeszcze 3 wariant, w którym taka analiza miala by zostac dokonana dopiero przy odczycie:) Po to zeby w miare uzupelniania tabeli nazwisk automatycznie w kazdym artykule sie te linki updatowaly.
4. Tokenizacja tekstu po białych znakach,w którym wyszukujemy konkretnej frazy (news raczej nie będzie epopeją), usuwamy słowa krótsze niż 1, 2, 3 ... znaki (to można obliczyć wg najktórszego imienia/nazwiska w bazie)

A moze przeszukanie tabeli po indeksie liczbowym z crc32 imienia i nazwiska, wysylajac crc32 z wszystkich tokenow na raz (oczywiscie crc32 z kazdego osobno). Teoretycznie moze nastapić kolizja crc32 ale to się już da w php skorygować.

konto usunięte

Temat: Automatyczna zamiana tekstu na linki

Robiłem kiedyś coś podobnego, nie z nazwiskami ale z tekstami, które miały być wiązane z innymi tekstami.

W przypadku imion i nazwisk wyglądało by to tak:

"Poniższy wybór poezji [tag=czesław miłosz]Miłosza[/tag] przekrojowo..."

Potem wyrażeniem regularnym wyszukuje się wszystkie wystąpienia, sprawdzamy w bazie - jeśli istnieje - zamieniamy na link, jeśli nie istnieje - kasujemy tag'i.
Jak do tego jeszcze zastosować crc32 - to powinno być w miarę szybkie.

Jeśli tagi nie są mile widziane, to w tekście należało by znaleźć wszystkie słowa, lub pary słów zaczynające się od dużych liter nie krótszych niż najkrótsze imię/nazwisko w bazie.
Nadal jednak pozostaje deklinacja i masa dziwnych sytuacji do ogarnięcia np. nazwisko będące jednocześnie słowem (Jan Dom) i/lub imieniem (Czesław Miłosz), same nazwiska, same imiona... można by tak jeszcze długo.Michał Wachowski edytował(a) ten post dnia 17.04.09 o godzinie 01:03

konto usunięte

Temat: Automatyczna zamiana tekstu na linki

A może tak ...

1. Wyszukujemy w tekście wszystkie słowa napisane z dużych liter
(listę zawężamy do par słów które następują po sobie)

2. Wykonujemy zapytanie:

SELECT
imie, nazwisko
FROM
ludzie
WHERE
(
imie = listaSlow[1][pierwsze słowo] AND
nazwisko = listaSlow[1][drugie słowo]
)
OR
(
imie = listaSlow[1][drugie słowo] AND
nazwisko = listaSlow[1][pierwsze słowo]
)
OR
(
imie = listaSlow[2][pierwsze słowo] AND
nazwisko = listaSlow[2][drugie słowo]
)
OR
(
imie = listaSlow[2][drugie słowo] AND
nazwisko = listaSlow[2][pierwsze słowo]
)
(...)
(
imie = listaSlow[n][pierwsze słowo] AND
nazwisko = listaSlow[n][drugie słowo]
)
OR
(
imie = listaSlow[n][drugie słowo] AND
nazwisko = listaSlow[n][pierwsze słowo]
)


3. Tworzymy listę imion i nazwisk do podmiany.

4. Podmieniamy znalezione imiona i nazwiska w tekście.Stanisław Głogowski edytował(a) ten post dnia 17.04.09 o godzinie 08:01

konto usunięte

Temat: Automatyczna zamiana tekstu na linki

Na imie, nazwisko powinien być oczywiście nałożony index ;)

Można jeszcze pokombinować z odmianami imion i nazwisk ... ale to już troszkę więcej zabawy ...Stanisław Głogowski edytował(a) ten post dnia 17.04.09 o godzinie 08:03
Adrian Z.

Adrian Z. IT Project Manager &
PHP Programmer

Temat: Automatyczna zamiana tekstu na linki

a może zamiast iść w las to zajrzeć do wikipedii w formularz edycji ?

konto usunięte

Temat: Automatyczna zamiana tekstu na linki

Miało być automatycznie ...
Adrian Z.

Adrian Z. IT Project Manager &
PHP Programmer

Temat: Automatyczna zamiana tekstu na linki

imho impossible , a jak ktoś się nazywa Jan Maria Rokita ?
Adam W.

Adam W. senior php
developer, Symfony

Temat: Automatyczna zamiana tekstu na linki

na last.fm tak zrobili, że trzeba zaznaczyć tekst i jeszcze podać co to jest - czy autor, czy piosenka etc.
dobrze tu było napisane, że można to zapisać tak [tag=imie nazwisko]imie nazwisko[/tag] i dopiero przy odczycie pobierać z bazy. oczywiście zrobić cache dla takiej treści. cache usuwać co jakiś czas lub po każdym dodaniu osoby do tabeli lub edycji tego tekstu.
myślę, że to będzie rozsądne rozwiązanie.
na sztywno nie ma co linków wstawiać, bo co jak za parę lat się zmienią?

Następna dyskusja:

przyjazne linki przy pomocy...




Wyślij zaproszenie do