运行 Java 程序里面 PHP 代码

Run Java program inside PHP code

我正在尝试制作一个简单的推荐系统,我发现使用 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 上 运行 这段代码,这样我就可以使用 "recommendation" 变量?

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

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

您可以 运行 这个 java 代码(首先编译)来自 php 代码 shell_exec

但是更好的解决方案是构建一个 REST 服务(或另一个)来实现语言不可知。