Как импортировать лексикон в формате XML-LMF для анализа настроений в R - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь импортировать следующую лексику в R для использования с пакетами интеллектуального анализа текста, такими как quanteda, или экспортировать ее в виде списка или фрейма данных:

https://github.com/opener-project/VU-sentiment-lexicon/tree/master/VUSentimentLexicon/IT-lexicon

Формат XML-LMF.Я не смог найти никакого способа для анализа такого формата с R.

(см. https://en.wikipedia.org/wiki/Lexical_Markup_Framework)

В качестве обходного пути я попытался использовать пакет XML, но структура немногоотличается от обычного XML, и мне не удалось разобрать все узлы.

1 Ответ

0 голосов
/ 25 января 2019

Мне удалось заставить его работать, используя пакет xml2. Вот мой код:

library(xml2)
library(quanteda)

# Read file and find the nodes
opeNER_xml <- read_xml("it-sentiment_lexicon.lmf.xml")
entries <- xml_find_all(opeNER_xml, ".//LexicalEntry")
lemmas <- xml_find_all(opeNER_xml, ".//Lemma")
confidence <- xml_find_all(opeNER_xml, ".//Confidence")
sentiment <- xml_find_all(opeNER_xml, ".//Sentiment")

# Parse and put in a data frame
opeNER_df <- data.frame(
  id = xml_attr(entries, "id"),
  lemma = xml_attr(lemmas, "writtenForm"),
  partOfSpeech = xml_attr(entries, "partOfSpeech"),
  confidenceScore = as.numeric(xml_attr(confidence, "score")),
  method = xml_attr(confidence, "method"),
  polarity = as.character(xml_attr(sentiment, "polarity")),
  stringsAsFactors = F
)
# Fix a mistake
opeNER_df$polarity <- ifelse(opeNER_df$polarity == "nneutral", 
                             "neutral", opeNER_df$polarity)

# Make quanteda dictionary
opeNER_dict <- quanteda::dictionary(with(opeNER_df, split(lemma, polarity)))
...