Анализ из файла JSON в Ruby и извлечение чисел из вложенных хэшей
Теперь я работаю над извлечением информации из файла JSON в Ruby. Тогда как я могу извлечь только цифры рядом со словом "оценка" из следующего текстового файла? Например, я хочу получить 0.6748984055823062, 0.6280145725181376.
{
"sentiment_analysis": [
{
"positive": [
{
"sentiment": "Popular",
"topic": "games",
"score": 0.6748984055823062,
"original_text": "Popular games",
"original_length": 13,
"normalized_text": "Popular games",
"normalized_length": 13,
"offset": 0
},
{
"sentiment": "engaging",
"topic": "pop culture-inspired games",
"score": 0.6280145725181376,
"original_text": "engaging pop culture-inspired games",
"original_length": 35,
"normalized_text": "engaging pop culture-inspired games",
"normalized_length": 35,
"offset": 370
},
"negative": [
{
"sentiment": "get sucked into",
"topic": "the idea of planning",
"score": -0.7923352042939829,
"original_text": "Students get sucked into the idea of planning",
"original_length": 45,
"normalized_text": "Students get sucked into the idea of planning",
"normalized_length": 45,
"offset": 342
},
{
"sentiment": "be daunted",
"topic": null,
"score": -0.5734506634410159,
"original_text": "initially be daunted",
"original_length": 20,
"normalized_text": "initially be daunted",
"normalized_length": 20,
"offset": 2104
},
Что я пробовал, так это то, что я мог прочитать файл и установить текстовый файл в хэш-переменную с помощью метода JSON.
require 'json'
json = JSON.parse(json_string)
Ответы
Ответ 1
Вы можете использовать Array#map
для сбора отзывов.
reviews = json['sentiment_analysis'][0]
positive_reviews = reviews['positive']
negative_reviews = reviews['negative']
positive_reviews.map { |review| review['score'] }
=> [0.6748984055823062, 0.6280145725181376]
negative_reviews.map { |review| review['score'] }
=> [-0.7923352042939829, -0.5734506634410159]
Надеюсь это поможет!
Ответ 2
Используя класс JSON
:
Импорт файла:
require "json"
file = File.open "/path/to/your/file.json"
data = JSON.load file
При желании вы можете закрыть его сейчас:
file.close
Файл выглядит так:
{
"title": "Facebook",
"url": "https://www.facebook.com",
"posts": [
"lemon-car",
"dead-memes"
]
}
Теперь файл можно прочитать так:
data["title"]
=> "Facebook"
data.keys
=> ["title", "url", "posts"]
data['posts']
=> ["lemon-car", "dead-memes"]
data["url"]
=> "https://www.facebook.com"
Надеюсь, это помогло!
Ответ 3
Разбор данных из файла
data_hash = JSON.parse(File.read('file-name-to-be-read.json'))
Тогда просто сопоставьте данные!
reviews = data_hash['sentiment_analysis'].first
reviews.map do |sentiment, reviews|
puts "#{sentiment} #{reviews.map { |review| review['score'] }}"
end
Я думаю, что это самый простой ответ.