Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ustalanie słów kluczowych dla danego tekstu
Forum PHP.pl > Forum > PHP
smook
Zakładam, że dla strony z artykułami chciałbym zastosowac jakiś sposób grupowania ich na zasadzie podobieństw. Doszedłem, że najwygodniejszym (i automatycznym) sposobem byłoby ustalanie słów kluczowych dla danego tekstu. Wtedy wyświetlając jakiś artykuł pokazywał bym tez linki do artykułów zawierających takie same słowa kluczowe. Ponieważ liknów mogło by być całlkiem sporo kolejnych rokiem będzie wyswietlanie ich np. w zależności od ich czasu dodania, czytelności itp. - mniejsza o kryteria to jest sprawa wtórna.

Problem jednak w tym, że dla każdego dodawanego tekstu pasowało by utworzyć słowa kluczowe i wpisać je do odpowiedniego pola (uniknę wtedy sporych opóźnień przy szukaniu tych słów podczas każdego wyświetlenia artykułu). I teraz pytanie w jaki sposób to robić, jak szukać tych słów?

Dla uproszczenia pomijam odmianę przez przypadki itp..
Rozumiem, że mógłbym podzielić string na słowa, każde dodawać do tablicy i liczyć ile razy w tej tablicy wystąpiło. Czy dobrze rozumuje, czy są może lepsze sposoby?
spenalzo
Ja bym zrobił tak, że rozwaliłbym tekst na wyrazy, wpakował do tablicy wszystkie dłuższe niż 3-5 znaków (pominięcie np. ich, jego, z,do) jako klucz nazwa wyrazu, a jako wartość ilosć wystąpień, posortował malejąco i wrzucił 100 pierwszych jako słowa kluczowe.
To tak w najprostszej wersji - w trudniejszej zrobić dodatkowo listę wyrazów które nie mogą być słowami kluczowymi (np. było, byłem itd).
BzikOS
Heh, a w praktyce:

[php:1:2d122adbf7]<?php
$text = "Zakładam, że dla strony z artykułami chciałbym zastosowac jakiś sposób grupowania ich na zasadzie podobieństw. Doszedłem, że najwygodniejszym (i automatycznym) sposobem byłoby ustalanie słów kluczowych dla danego tekstu. Wtedy wyświetlając jakiś artykuł pokazywał bym tez linki do artykułów zawierających takie same słowa kluczowe. Ponieważ liknów mogło by być całlkiem sporo kolejnych rokiem będzie wyswietlanie ich np. w zależności od ich czasu dodania, czytelności itp. - mniejsza o kryteria to jest sprawa wtórna.

Problem jednak w tym, że dla każdego dodawanego tekstu pasowało by utworzyć słowa kluczowe i wpisać je do odpowiedniego pola (uniknę wtedy sporych opóźnień przy szukaniu tych słów podczas każdego wyświetlenia artykułu). I teraz pytanie w jaki sposób to robić, jak szukać tych słów?

Dla uproszczenia pomijam odmianę przez przypadki itp..
Rozumiem, że mógłbym podzielić string na słowa, każde dodawać do tablicy i liczyć ile razy w tej tablicy wystąpiło. Czy dobrze rozumuje, czy są może lepsze sposoby?";


$tempArr1 = Array(",", ".", ":", ";", "(", ")", "?", "!", "n", "r", " dlaczego ");
$tempArr2 = Array('', '', '', '', '', '', '', '', ' ', '', '');
$text = str_replace($tempArr1, $tempArr2, $text);

$tablica = explode(" ", $text);
foreach($tablica as $aKey=>$aVal) {
$tablica[$aKey] = strtolower($aVal);
if(strlen($aVal) < 4)
unset($tablica[$aKey]);
}

$tablica2 = array_count_values($tablica);
arsort($tablica2);

print("TOP TEN<br>");
$i=0;
foreach($tablica2 as $aKey=>$aVal) {
print($aKey . " = " . $aVal . "<br>");
if(++$i == 10)
break;
}
?>[/php:1:2d122adbf7]

W tablicach $temp?questionmark.gif można powstawiać słowa, które nie powinny być zliczane.
spenalzo
[php:1:ac2d8aa87c]<?php
// Ilosc wystapien, zeby wyraz byl slowem kluczowym
$prog=2;

// Minimalna dlugosc wyrazu
$len=5;

$text="Zakładam, że dla strony z artykułami chciałbym zastosowac jakiś sposób grupowania ich na zasadzie podobieństw. Doszedłem, że najwygodniejszym (i automatycznym) sposobem byłoby ustalanie słów kluczowych dla danego tekstu. Wtedy wyświetlając jakiś artykuł pokazywał bym tez linki do artykułów zawierających takie same słowa kluczowe. Ponieważ liknów mogło by być całlkiem sporo kolejnych rokiem będzie wyswietlanie ich np. w zależności od ich czasu dodania, czytelności itp. - mniejsza o kryteria to jest sprawa wtórna.

Problem jednak w tym, że dla każdego dodawanego tekstu pasowało by utworzyć słowa kluczowe i wpisać je do odpowiedniego pola (uniknę wtedy sporych opóźnień przy szukaniu tych słów podczas każdego wyświetlenia artykułu). I teraz pytanie w jaki sposób to robić, jak szukać tych słów?

Dla uproszczenia pomijam odmianę przez przypadki itp..
Rozumiem, że mógłbym podzielić string na słowa, każde dodawać do tablicy i liczyć ile razy w tej tablicy wystąpiło. Czy dobrze rozumuje, czy są może lepsze sposoby?";

$org = Array(",", ".", ":", ";", "(", ")", "?", "!", "n", "r","-",""","'");
$zam = Array('', '', '', '', '', '', '', '', ' ', '','','','');

$text=str_replace($org, $zam, $text);
$tab=explode(" ",$text);
foreach($tab as $k=>$wyraz)
{
$wyraz=strtolower($wyraz);
if(strlen($wyraz)>=$len)
{
$slowa[$wyraz]+=1;
}
}
foreach ($slowa AS $wyraz=>$ilosc)
{
if($ilosc<$prog)
{
unset($slowa[$wyraz]);
}
}
arsort($slowa);
?>[/php:1:ac2d8aa87c]
potem
[php:1:ac2d8aa87c]<?php
print_r($slowa);
?>[/php:1:ac2d8aa87c]
co zwróci
Cytat
Array
(
[słowa] => 3
[tekstu] => 2
[wtedy] => 2
[sposób] => 2
[kluczowe] => 2
[każdego] => 2
[tablicy] => 2
[jakiś] => 2
)
smook
Właśnie w ten sposób to pojmowałem, dzięki za pomoc.

Postaram się jeszcze poszukać na jakiś grupach dotyzących bibliotekoznawstwa i katalogowania zbiorów, bo "polska język trudna sprawa" i tworzenie słów kluczowych może jest tu zabawne.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.