2015-05-21 3 views
1

Я пытаюсь создать простую систему рекомендаций, и я обнаружил, что с mahout это довольно легко сделать. Я следующий код (я бегу это на затмении, и все прекрасно работает:.Запуск программы Java внутри PHP-кода

package com.predictionmarketing.RecommenderApp; 

import java.io.File; 
import java.io.IOException; 

import org.apache.mahout.cf.taste.common.TasteException; 
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; 
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood; 
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender; 
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; 
import org.apache.mahout.cf.taste.model.DataModel; 
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; 
import org.apache.mahout.cf.taste.recommender.RecommendedItem; 
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender; 
import org.apache.mahout.cf.taste.similarity.UserSimilarity; 


/** 
* Java's application, user based recommender system 
* 
*/ 
public class App 
{ 
    public static void main(String[] args) 
    { 
     // Modelo 
     DataModel model = null; 

     // Inicializar similaridad 
     UserSimilarity similarity = null; 

     // Leer .cv userID, itemID, value 
     try { 
      model = new FileDataModel(new File("data/dataset.csv")); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     // Encontrar matriz de similaridad 
     try { 
      similarity = new PearsonCorrelationSimilarity(model); 
     } catch (TasteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); 
     UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); 
     java.util.List<RecommendedItem> recommendations = null; 
     try { 
      recommendations = recommender.recommend(2, 3); 
     } catch (TasteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     // Mostrar Recomendaciones 
     for (RecommendedItem recommendation : recommendations) { 
      System.out.println(recommendation.getItemID()); 
     } 
    } 

} 

Однако, мне нужно, чтобы запустить этот код в Интернете, потому что я делаю приложение на PHP, и именно здесь возникает моя проблема в том, есть способ запустить этот код на PHP, поэтому я могу использовать переменную «рекомендация»?

+0

Просто так, чтобы я правильно понял вопрос. Вы просто пытаетесь выяснить способ вызова кода Java из PHP? – Michael

+0

Да, в принципе это то, что я хочу делать. – dpalma

+0

есть ли у вас какие-либо другие вопросы или мой ответ работает на ваш вопрос? –

ответ

0

Вы можете запустить этот код Java (скомпилированный первым) из php-кода с помощью shell_exec.

Но лучшее решение построит службу REST (или другую), чтобы сделать это агностиком языка.

+0

Я попытался это сделать, но это не сработает. Он отлично работает с такими командами, как «echo hello world». Но я попытался запустить скомпилированную java-программу, и она не сработала, ничего не печатала, я не знаю почему. Я даже тестировал с помощью shell_exec ('printf "asd"), но это не работает. – dpalma

+0

shell_exec предназначен для запуска команд оболочки. Если hello world запущен, скомпилированная java-программа должна запускаться. Вы пытались запустить java-программу непосредственно из оболочки? –

+0

Да. Я попробовал, на самом деле у него есть выход, который я хотел. Возможно, это потому, что я нахожусь на локальном хосте, и я пропустил шаг? (что-то вроде isntalling java на localhost или IDK). Извините ig Я noob :( – dpalma

0

Для этого нет простого решения. Чтобы заставить его работать и общаться с PHP, вам нужно создать для него некоторый интерфейс. Например, создайте Java-сервлет и поместите его на контейнер Servlet (веб-сервер Java). Это проще всего увидеть сейчас.

Другое решение, ld рассмотрите также службу REST или SOAP, чтобы обмениваться данными между этим Java-кодом и вашим приложением PHP. Для этого также понадобится контейнер JavaEE.

Смежные вопросы