powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (python, php) Помогите, пожалуйста, перевести код
13 сообщений из 13, страница 1 из 1
(python, php) Помогите, пожалуйста, перевести код
    #37782971
anonirus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
нужно написать тоже самое, только на php
это кусок кода для рекомендательных сервисов из книги Тоби Сегарана
в особенности я не поняла, что такое item
заранее всем огромное спасибо)


# Возвращает коэффициент корреляции Пирсона между p1 и p2
def sim_pearson(prefs,p1,p2):
# Получить список предметов, оцененных обоими
si={}
for item in prefs[p1]:
if item in prefs[p2]: si[item]=1

# Найти число элементов
n=len(si)
# Если нет ни одной общей оценки, вернуть 0
if n==0: return 0

# Вычислить сумму всех предпочтений
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])

# Вычислить сумму квадратов
sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
sum2Sq=sum([pow(prefs[p2][it],2) for it in si])

# Вычислить сумму произведений
pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])

# Вычислить коэффициент Пирсона
num=pSum-(sum1*sum2/n)
den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))

if den==0: return 0
r=num/den
return r
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783065
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anonirus,


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
function sim_pearson($prefs, $p1, $p2) {
	# Если у когото нет вообще предпочтений
	if (!isset($prefs[$p1]) || !isset($prefs[$p2]))
		return 0;
	# Получить список предметов, оцененных обоими
	$si=array();
	foreach($prefs[$p1] as $item) {
		if (in_array($item, $prefs[$p2]))
			$si[$item]=1;
	}
	# Найти число элементов
	$n=sizeof($si);
	# Если нет ни одной общей оценки, вернуть 0
	if ($n==0)
		return 0;
	$sum1 = $sum2 = $sum1Sq = $sum2Sq = $pSum = 0;
	foreach($si as $it) {
		# Вычислить сумму всех предпочтений
		$sum1 += $prefs[$p1][$it];
		$sum2 += $prefs[$p2][$it];
		# Вычислить сумму квадратов
		$sum1Sq += pow($prefs[$p1][$it],2);
		$sum2Sq += pow($prefs[$p2][$it],2);
		# Вычислить сумму произведений
		$pSum += $sum1*$sum2;
	}
	# Вычислить коэффициент Пирсона
	$num=$pSum-(($sum1*$sum2)/$n);
	$den=sqrt(($sum1Sq-pow($sum1,2)/$n)*($sum2Sq-pow($sum2,2)/$n));
	if ($den==0)
		return 0;
	return $num/$den;
}


...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783200
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

Последние три строчки можно и в тернарный оператор засунуть.
Код: php
1.
2.
3.
if ($den==0)
		return 0;
	return $num/$den;



Код: php
1.
return $den==0?0:$num/$den;
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783205
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
return $den==0 ?: $num/$den;
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783429
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

$pSum += $sum1*$sum2;
заменить на
$pSum += $prefs[$p1][$it]*$prefs[$p2][$it];
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783736
anonirus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо вам огромное!!

а вы не могли бы ещё вот это перевести

# Возвращает список наилучших соответствий для человека из словаря prefs.
# Количество результатов в списке и функция подобия – необязательные
# параметры.
def topMatches(prefs,person,n=5,similarity=sim_pearson):
scores=[(similarity(prefs,person,other),other)
for other in prefs if other!=person]
# Отсортировать список по убыванию оценок
scores.sort( )
scores.reverse( )
return scores[0:n]

# Получить рекомендации для заданного человека, пользуясь взвешенным средним
# оценок, данных всеми остальными пользователями
def getRecommendations(prefs,person,similarity=sim_pearson):
totals={}
simSums={}
for other in prefs:
# сравнивать меня с собой же не нужно
if other==person: continue
sim=similarity(prefs,person,other)
# игнорировать нулевые и отрицательные оценки
if sim<=0: continue
for item in prefs[other]:
# оценивать только фильмы, которые я еще не смотрел
if item not in prefs[person] or prefs[person][item]==0:
# Коэффициент подобия * Оценка
totals.setdefault(item,0)
totals[item]+=prefs[other][item]*sim
# Сумма коэффициентов подобия
simSums.setdefault(item,0)
simSums[item]+=sim
# Создать нормализованный список
rankings=[(total/simSums[item],item) for item,total in totals.items( )]
# Вернуть отсортированный список
rankings.sort( )
rankings.reverse( )
return rankings

>> reload(recommendations)
>> recommendations.topMatches(recommendations.critics,'Toby',n=3)

>>> reload(recommendations)
>>> recommendations.getRecommendations(recommendations.critics,'Toby')
>>> recommendations.getRecommendations(recommendations.critics,'Toby',
... similarity=recommendations.sim_distance)



опять же, заранее всех благодарю))
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783760
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anonirus,

А самому? Хотя, впрочем, дядя r u переведёт. :)
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783766
anonirus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSerge,

я до сих пор, к сожалению, так и не поняла python...вчера пол дня над ним просидела и без особых результатов

извините, если слишком настойчива..
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37783837
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anonirus,

Пардон! Я не знал, что Вы женского полу. :)
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37784452
anonirus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
будьте человеками!

мне больше не у кого попросить

настоящий питерский шоколад моему спасителю прямо в руки почтой России)))
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37788711
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anonirus,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
function topMatches($prefs, $person, $n=5, $similarity='sim_pearson') {
	$scores = array();
	foreach($prefs as $other) {
		if ($other!=$person)
			$scores[] = array($similarity($prefs,$person,$other), $other);
	}
	sort($scores);
	return array_slice(array_reverse($scores), 0, $n);
}
...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37788715
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anonirus,

из за отсутствия отступов возможно я гдето и ошибся. надо проверять

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
function getRecommendations($prefs,$person,$similarity='sim_pearson') {
	$totals=array();
	$simSums=array();
	foreach($prefs as $other) {
		# сравнивать меня с собой же не нужно
		if ($other==$person)
			continue;
		$sim = $similarity($prefs,$person,$other);
		# игнорировать нулевые и отрицательные оценки
		if ($sim<=0)
			continue;
		foreach($prefs[$other] as $item) {
			# оценивать только фильмы, которые я еще не смотрел
			if (!in_array($item, $prefs[$person]) || $prefs[$person][$item]==0) {
				# Коэффициент подобия * Оценка
				if (!isset($totals[$item]))
					$totals[$item] = 0;
				$totals[$item] += $prefs[$other][$item]*$sim;
				# Сумма коэффициентов подобия
				if (!isset($simSums[$item]))
					$simSums[$item] = 0;
				$simSums[$item] += $sim;
			}
		}
		# Создать нормализованный список
		$rankings = array();
		foreach($totals as $item=>$total) {
			$rankings[] = array($total/$simSums[$item], $item);
		}
		# Вернуть отсортированный список
		sort($rankings);
		return array_reverse($rankings);
	}
}


...
Рейтинг: 0 / 0
(python, php) Помогите, пожалуйста, перевести код
    #37808512
anonirus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,
спасибо огромное!!
давай адрес и жди посылку)))
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (python, php) Помогите, пожалуйста, перевести код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]