将json文件解析为datafram

2024-03-29 10:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将一些json文件解析为一个数据帧。我想让一列包含文本中的单词,另一列包含相应的实体–当“value”对应于单词时,实体将是下面文本的“Type”,否则我想指定标签“O”。你知道吗

下面是一个例子。 这是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(),因为有时值由两个单词组成。希望这是清楚的。谢谢您!你知道吗


Tags: 文件文本实体valueusetypeitfind
2条回答

我不知道你所需要的是否就是你所期望的输出。 我给你的解决方案是“脏”(更多的元素和列标签放在第一位) 你可以设法清理它,并把它的格式,你需要的。因为您没有提供一段代码来开始,所以您可以完成它。 最终您会发现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 

这是一个困难的问题,取决于本例中没有哪些数据以及需要的输出。实体值中是否有重复数据?秩序重要吗?你想在输出中重复吗?你知道吗

可以使用以下几种工具:

  • make a trie在您搜索字符串之前,先从实体值中取出。如果您有相同名称的重叠版本,如“Netgear”和“Netgear INC.”,并且您想要最长的版本,那么这是很好的。你知道吗
  • nltk.PunktSentenceTokenizer这个词对名词很难理解。本教程在解释如何处理它们方面做得更好。你知道吗

相关问题 更多 >