Мне нужно передать значение из PHP в скрипт Python, который затем записывает значение в файл csv. Но у меня возникают трудности, мой питон при вызове пишет пустой файл csv. В чем может быть проблема.
<?php if (isset($_POST['data'])){ $data = $_POST['data']; $result = exec("python processData.py .$data"); echo $result; } ?>
и processData.py
import nltk from nltk.corpus import stopwords from nltk import stem import re import sys import csv mysentence = sys.argv[1] f = open("output.csv", "wb") tokens = nltk.word_tokenize(mysentence) d = [i.lower() for i in tokens if (not tokens in stopwords.words('english'))] porter = nltk.PorterStemmer() for t in tokens: result = porter.stem(t) f.write(result+"\n") print result f.close()
$result = exec("python processData.py .$data");
вероятно, проблема, если вы набрали: $data = "hello little world";
он будет проходить как
$result = exec("python processData.py .hello little world");
sys.argv будет
["processData.py",".hello","little","world"]
к сожалению, я не уверен, как nltk справится с этим, но, конечно, не так, как вы намереваетесь
как в сторону
d = [i.lower() for i in tokens if (not tokens in stopwords.words('english'))]
должен быть перезаписан
if tokens not in stopwords.words('english'): d = [i.lower() for i in tokens] else: #if your actually planning on using d anywhere ... currently your just throwing it out # not using d makes all of this just as effective as a pass statement d = []
Может быть . перед $ data попробуйте следующее:
$result = exec("python processData.py {$data}");
С уважением!
Нет проблемы с exec()
или что-то еще. Проблема в том, что модуль nltk
не может найти каталог nltk_data
. Для этого просто найдите где nltk_data
присутствует в вашей системе: обычно ~/nltk_data
. Теперь импортируйте этот путь при запуске функции.
import nltk;
Теперь nltk.data.path
– это список мест для поиска модулей. Вы можете просто сделать:
nltk.data.path.append("your location/directory");