Не удалось установить CoreNLPNERTagger [дубликат]

Как объяснил 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.

80
задан Peter O. 6 December 2015 в 06:28
поделиться

8 ответов

Устаревший ответ

Ответ ниже устарел, воспользуйтесь решением на 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
21
ответ дан alvas 3 September 2018 в 17:52
поделиться

Если я хорошо помню, парсер 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, но может быть способ сделать вызовы командной строки.

Возможно, это не тот точный маршрут, на который вы надеялись, но, надеюсь, это даст вам некоторое вдохновение. Удачи.

6
ответ дан bob dope 3 September 2018 в 17:52
поделиться

Я занял много часов и, наконец, нашел простое решение для пользователей 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())
2
ответ дан Community 3 September 2018 в 17:52
поделиться

Существует интерфейс python для парсера stanford

http://projects.csail.mit.edu/spatial/Stanford_Parser

7
ответ дан Rohith 3 September 2018 в 17:52
поделиться

Вы можете использовать вывод 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)
4
ответ дан Sadik 3 September 2018 в 17:52
поделиться

Я использую версию 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')]
73
ответ дан Servy 3 September 2018 в 17:52
поделиться

На странице программного обеспечения Stanford Core NLP есть список оболочек python:

http://nlp.stanford.edu/software/corenlp.shtml#Extensions

7
ответ дан silverasm 3 September 2018 в 17:52
поделиться

Я нахожусь на машине 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-программу с другого пути. Должен быть лучший способ, но это работает.

3
ответ дан Ted Petrou 3 September 2018 в 17:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: