Разбор файла json в панде - PullRequest
       4

Разбор файла json в панде

0 голосов
/ 24 сентября 2019

Мне нужно было бы проанализировать некоторые файлы json на фрейме данных pandas.Я хочу иметь один столбец со словами, присутствующими в тексте, и другой столбец с соответствующей сущностью - сущность будет «Типом» текста ниже, когда «значение» соответствует слову, в противном случае я хочу назначитьярлык «О».

Ниже приведен пример.Это файл JSON:

       {"Text": "I currently use a Netgear Nighthawk AC1900. I find it reliable.",
        "Entities": [
        {
            "Type": "ORGANIZATION ", 
            "Value": "Netgear"
        }, 
        {
            "Type": "DEVICE ", 
            "Value": "Nighthawk AC1900"
        }]
       }

Вот что я хочу получить:

              WORD                TAG
              I                    O
              currently            O
              use                  O
              a                    O
              Netgear              ORGANIZATION
              Nighthawk AC1900     DEVICE
              .                    O
              I                    O
              find                 O
              it                   O
              reliable             O
              .                    O

Может ли кто-нибудь помочь мне с анализом?Я не могу использовать split (), потому что иногда значения состоят из двух слов.Надеюсь, это понятно.Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Я не знаю, действительно ли вам нужно то, что вы публикуете в качестве желаемого результата.Решение, которое я даю вам, «грязное» (больше элементов и столбец TAG помещается первым). Вы можете очистить его и поместить в нужный вам формат.Поскольку вы не предоставили кусок кода для начала, вы можете закончить его.В конце концов вы обнаружите, что цель stackoverflow - не заставить людей писать код для вас, а чтобы люди помогли вам с кодом, который вы пытаетесь.

import json
import pandas as pd

#open and reading of the json:
with open('netgear.json','r') as jfile:
   data = jfile.read()

info = json.loads(data)

#json into content 
words,tags = info['Text'].split(),info['Entities']

#list to handle the Entities
prelist = []

for i in tags:

    j = list(i.values())
    #['ORGANIZATION ', 'Netgear']
    #['DEVICE ', 'Nighthawk AC1900']    

    prelist.append(j)

#DataFrames to be merged
dft = pd.DataFrame(prelist,columns=['TAG','WORD'])  
dfw = pd.DataFrame(words,columns=['WORD'])  

#combine the dataFrames and NaN into 0
df = dfw.merge(dft, on='WORD', how='outer').fillna(0)

Это вывод:

                 WORD            TAG
0                  I              0
1                  I              0
2          currently              0
3                use              0
4                  a              0
5            Netgear  ORGANIZATION 
6          Nighthawk              0
7            AC1900.              0
8               find              0
9                 it              0
10         reliable.              0
11  Nighthawk AC1900        DEVICE 
0 голосов
/ 24 сентября 2019

Это сложная проблема, и она будет зависеть от того, каких данных нет в этом примере, и требуемого вывода.Есть ли у вас повторяющиеся данные в значениях сущностей?важен ли порядок?Вы хотите повторения в выводе?

Существует несколько инструментов, которые можно использовать:

  • сделать поиск из значений Entity перед поискомстрока.Это хорошо, если у вас есть перекрывающиеся версии с таким же именем, как «Netgear» и «Netgear INC.»и вы хотите самую длинную версию.
  • nltk.PunktSentenceTokenizer С этим привередливым работать с существительными.Этот урок лучше объясняет, как с ними справляться.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...