Как объяснил scompt.com , запрос может завершиться ошибкой. Используйте этот код, чтобы получить ошибку запроса или правильный результат:
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("
SELECT * FROM Users
WHERE UserName LIKE '".mysql_real_escape_string($username)."'
");
if($result)
{
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
}
} else {
echo 'Invalid query: ' . mysql_error() . "\n";
echo 'Whole query: ' . $query;
}
Для получения дополнительной информации см. Документацию для mysql_query()
.
Фактической ошибкой были одиночные кавычки, так что переменная $username
не анализировалась. Но вы действительно должны использовать mysql_real_escape_string($username)
, чтобы избежать инъекций SQL.
Ответ ниже устарел, воспользуйтесь решением на https://stackoverflow.com/a/51981566/610569 для NLTK v3.3 и выше .
Как и в текущем синтаксисе Stanford (2015-04-20), выход по умолчанию для lexparser.sh
изменился, поэтому сценарий ниже не будет работать .
Но этот ответ сохранен для наследия, он все равно будет работать с http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zip .
Я предлагаю вам не испортить Jython, JPype. Пусть python делает вещи python и позволяет java делать java-материал, выдает вывод из Stanford Parser через консоль.
После того, как вы установили Stanford Parser в свой домашний каталог ~/
, просто используйте этот рецепт python, чтобы получить плоский синтаксический разбор:
import os
sentence = "this is a foo bar i want to parse."
os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()
bracketed_parse = " ".join( [i.strip() for i in parser_out if i.strip()[0] == "("] )
print bracketed_parse
Если я хорошо помню, парсер Stanford представляет собой библиотеку java, поэтому на вашем сервере / компьютере должен быть Java-интерпретатор.
Я использовал его один раз на сервере в сочетании с php-скриптом. Сценарий использовал функцию exec () php для вызова командной строки для синтаксического анализатора следующим образом:
<?php
exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );
?>
Я не помню всех деталей этой команды, она в основном открывала fileToParse, анализировалась он, и написал вывод в файле результатов. PHP затем откроет файл результатов для дальнейшего использования.
Конец команды направляет подробный отчет парсеру NULL, чтобы предотвратить ненужную информацию из командной строки от нарушения сценария.
Не знаю много о Python, но может быть способ сделать вызовы командной строки.
Возможно, это не тот точный маршрут, на который вы надеялись, но, надеюсь, это даст вам некоторое вдохновение. Удачи.
Я занял много часов и, наконец, нашел простое решение для пользователей Windows. В основном его обобщенная версия существующего ответа по alvas, но была легко следовать (надеюсь) для тех, кто новичок в stanford NLP и являются пользователями Window.
1) Загрузите модуль, который вы хотите использовать, например, NER, POS и т. д. В моем случае я хотел использовать NER, поэтому я загрузил модуль из http://nlp.stanford.edu/software/stanford-ner-2015-04 -20.zip
2) Разархивируйте файл.
3) Установите переменные среды (classpath и stanford_modules) из распакованной папки.
import os
os.environ['CLASSPATH'] = "C:/Users/Downloads/stanford-ner-2015-04-20/stanford-ner.jar"
os.environ['STANFORD_MODELS'] = "C:/Users/Downloads/stanford-ner-2015-04-20/classifiers/"
4) установить переменные среды для JAVA, например, там, где вы установили JAVA. для меня это было ниже
os.environ['JAVAHOME'] = "C:/Program Files/Java/jdk1.8.0_102/bin/java.exe"
5) импортировать модуль, который вы хотите
from nltk.tag import StanfordNERTagger
6) вызвать предварительно обработанную модель, которая присутствует в папке классификатора в распакованной папке. добавьте «.gz» в конце для расширения файла. для меня модель, которую я хотел использовать, была english.all.3class.distsim.crf.ser
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
7) Теперь выполните парсер! и мы закончили !!
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
Существует интерфейс python для парсера stanford
Вы можете использовать вывод Stanford Parsers для создания дерева в nltk (nltk.tree.Tree).
Предполагая, что анализатор stanford дает вам файл, в котором есть ровно одно дерево разбора для каждого предложения , Тогда этот пример работает, хотя он может выглядеть не очень pythonic:
f = open(sys.argv[1]+".output"+".30"+".stp", "r")
parse_trees_text=[]
tree = ""
for line in f:
if line.isspace():
parse_trees_text.append(tree)
tree = ""
elif "(. ...))" in line:
#print "YES"
tree = tree+')'
parse_trees_text.append(tree)
tree = ""
else:
tree = tree + line
parse_trees=[]
for t in parse_trees_text:
tree = nltk.Tree(t)
tree.__delitem__(len(tree)-1) #delete "(. .))" from tree (you don't need that)
s = traverse(tree)
parse_trees.append(tree)
Я использую версию nltk 3.2.4. И следующий код работал для меня.
from nltk.internals import find_jars_within_path
from nltk.tag import StanfordPOSTagger
from nltk import word_tokenize
# Alternatively to setting the CLASSPATH add the jar and model via their
path:
jar = '/home/ubuntu/stanford-postagger-full-2017-06-09/stanford-postagger.jar'
model = '/home/ubuntu/stanford-postagger-full-2017-06-09/models/english-left3words-distsim.tagger'
pos_tagger = StanfordPOSTagger(model, jar)
# Add other jars from Stanford directory
stanford_dir = pos_tagger._stanford_jar.rpartition('/')[0]
stanford_jars = find_jars_within_path(stanford_dir)
pos_tagger._stanford_jar = ':'.join(stanford_jars)
text = pos_tagger.tag(word_tokenize("Open app and play movie"))
print(text)
Выход:
[('Open', 'VB'), ('app', 'NN'), ('and', 'CC'), ('play', 'VB'), ('movie', 'NN')]
На странице программного обеспечения Stanford Core NLP есть список оболочек python:
Я нахожусь на машине Windows, и вы можете просто запустить парсер, как обычно, из командной строки, но как в другом каталоге, поэтому вам не нужно редактировать файл lexparser.bat. Просто поставьте полный путь.
cmd = r'java -cp \Documents\stanford_nlp\stanford-parser-full-2015-01-30 edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "typedDependencies" \Documents\stanford_nlp\stanford-parser-full-2015-01-30\stanford-parser-3.5.1-models\edu\stanford\nlp\models\lexparser\englishFactored.ser.gz stanfordtemp.txt'
parse_out = os.popen(cmd).readlines()
Трудная часть для меня заключалась в понимании, как запускать java-программу с другого пути. Должен быть лучший способ, но это работает.