parseError при запуске скрипта Python из Node.js

голоса
0

Я построение фильма Рекомендатора. Мой рекомендатель движок написан на Python. И я бегу с вебсайта через Node.js (Express).

Код питона itselfs работы и вот выход, когда я бегу его из консоли. Он использует панда и NumPy для расчетов возвращает матрицу с названием фильма и его сходством с выбранным фильмом, и я также напечатать привет:

код команды Python

На моем сайте я следующий HTML в теле:

<form class=test method=post action=/test>
   <input type=text name=user[name]>
   <input class=button type=submit value=Submit>
</form>

JS на стороне клиента

(function($) {

  $(document).ready(function () {
      var btn = $('.button'),
          input = $('input');
      btn.on('click', function() {
        e.preventDefault();
      })
  })
})(jQuery)

JS на стороне сервера, с экспресс

var express = require('express');
var app = express();
var path = require('path');
var bodyParser = require('body-parser');
var PythonShell = require('python-shell');

var options = {
  mode: 'text',
  pythonOptions: ['-u'],
  scriptPath: E:/Praca Magisterska/Python,
};

app.use(express.static(path.join(__dirname, '')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

app.get('/', function (req, res) {
  res.sendFile(path.join(__dirname+'/index.html'));
})

app.post('/test', function (req, res) {
  console.log(req.body);

  PythonShell.run('similarMovies.py', options, function (err, results) {
    if (err) throw err;
    // results is an array consisting of messages collected during execution
    console.log('results: %j', results);
  });

})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
})

Итак, как это работает. При нажатии кнопки отправить БТН Я стреляя мой node.js запустить сценарий питона , а затем console.logрезультаты. К сожалению , я получаю ошибки, изображение в конце.

Однако, когда я не запускать функцию и вместо этого я пишу в конце моего Python просто:

print hello
print 2

результаты кода обрабатываются хорошо.

Изображение результатов командовать

Что может быть проблема? Erros что я получаю с делением на ноль и другие внутри несильно? Но если да, то почему она работает, когда я запускаю его непосредственно из ЦМД -python similarMovies.py

Вот питона код:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np

def showSimilarMovies(movieTitle, minRatings):

        # import ratingów z pliku csv
    rating_cols = ['user_id', 'movie_id', 'rating']
    rating = pd.read_csv('E:/Praca Magisterska/MovieLens Data/ratings.csv', names = rating_cols, usecols = range(3))

    # import filmów z pliku csv
    movie_cols = ['movie_id', 'title']
    movie = pd.read_csv('E:/Praca Magisterska/MovieLens Data/movies.csv', names = movie_cols, usecols = range(2))

    # łączenie zaimportowanych ratingów oraz filmów, usuwanie pierwszego wiersza
    ratings = pd.merge(movie, rating)
    ratings = ratings.drop(ratings.index`0`)
    # konwertowanie kolumn ze stringów na numeric
    ratings['rating'] = pd.to_numeric(ratings['rating'])
    ratings['user_id'] = pd.to_numeric(ratings['user_id'])

    # tworzenie macierzy pokazująceje oceny filmów przez wszystkich użytkowników.
    movieRatingsPivot = ratings.pivot_table(index=['user_id'], columns=['title'], values='rating')

    # filtrowanie kolumny do  obliczania filmów podobnych
    starWarsRating = movieRatingsPivot[movieTitle]

    # obliczanie korelacji danego filmu z każdym innym i wyrzucanie tych z którymi nic go nie łączy
    similarMovies = movieRatingsPivot.corrwith(starWarsRating)
    similarMovies = pd.DataFrame(similarMovies.dropna())

    # zmiana nazwy kolumny oraz sortowanie według rosnącej korelacji
    similarMovies.columns = ['similarity']
    similarMovies.sort_values(by=['similarity'], ascending=False)

    # tworzenie statystyk dla filmów, size to ilość ocen, a mean to średnia z ocen
    # zgrupowane po tytułach
    movieStats = ratings.groupby('title').agg({'rating': [np.size, np.mean]})

    # popularne filmy, które mają więcej niż 100 ocen
    popularMovies = movieStats['rating']['size']>=minRatings

    # sortowanie popularnych filmów od najwyższej średniej
    movieStats[popularMovies].sort_values(by=[('rating', 'mean')], ascending=False)

    # łączenie popularnych filmów z filmami podobnymi do  filtrowanego filmu i ich sortowanie
    moviesBySimilarity = movieStats[popularMovies].join(similarMovies)
    x = moviesBySimilarity.sort_values(by='similarity', ascending=False)
    k = x.drop(x.columns[[0, 1]], axis = 1)
    k = k.drop(x.index`0`)
    return k

print hello    
print 2
showSimilarMovies('Star Wars: Episode VI - Return of the Jedi (1983)', 300)
Задан 06/05/2017 в 14:48
источник пользователем
На других языках...                            


1 ответов

голоса
1

Я понял это, как раз добавил две строки из самого начала питона файла игнорировать предупреждение:

import warnings

warnings.filterwarnings('ignore')

Теперь мой вывод, что было необходимо.

Ответил 07/05/2017 в 11:07
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more