Запустите программу Java внутри кода PHP [дубликата]

1

Я пытаюсь создать простую систему рекомендаций, и я обнаружил, что с 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 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?
  • 0
    да, в принципе это то, что я хочу сделать.
Показать ещё 1 комментарий
Теги:
maven
mahout

2 ответа

0
Лучший ответ

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

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

  • 0
    Я пытался сделать это, но это не работает. Он хорошо работает с такими командами, как «echo hello world». Но я пытался запустить скомпилированную программу Java, и она не работала, ничего не печатала, я не знаю почему. Я даже тестировал с shell_exec ('printf "asd"'), но это тоже не работает.
  • 0
    shell_exec для запуска команд оболочки. Если работает hello world, должна работать скомпилированная java-программа. Вы пытались запустить программу Java непосредственно из оболочки в первую очередь?
Показать ещё 5 комментариев
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню