在PHP代码中运行Java程序

时间:2015-05-21 12:54:17

标签: java php maven mahout

我正在尝试制作一个简单的推荐系统,我发现使用mahout很容易制作一个。我有以下代码(我在eclipse上运行它,一切都很好:

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上运行此代码,所以我可以使用“推荐”变量?

2 个答案:

答案 0 :(得分:0)

没有简单的解决方案。为了使其工作并与PHP通信,您必须为它创建一些接口。例如,创建java servlet,并将其放在Servlet容器(Java Web服务器)上。这是我现在看到的最简单的。

您可以考虑使用REST或SOAP服务的其他解决方案,以在此Java代码和PHP应用程序之间交换数据。这也需要JavaEE容器。

答案 1 :(得分:0)

您可以使用shell_exec从PHP代码运行此java代码(首先编译)。

但这是一个更好的解决方案,可以构建一个REST服务(或其他服务),使其与语言无关。