Я пытаюсь взять набор строк, разметить Струны на отдельные символы, и перестроить их в формат JSON с целью здания визуализации кластера дендрограммы (вроде как this word tree, для строк, за исключением вместо предложений). Таким образом, бывают случаи, когда последовательность символов разделяется (или публикуется) по данным.Структурирование Plain Text в формат JSON
Так, например, позволяет сказать, что у меня есть текстовый файл, который выглядит следующим образом:
xin_qn2
x_qing4n3
x_qing4nian_
Это все я предвижу для моего входа; нет заголовков CSV или чего-либо, связанного с данными. Объект JSON будет выглядеть примерно так:
{
"name": "x",
"children": [
{
"name": i,
},
{
"name": _,
"children": [
{
"name": "q"
}
]
}
]
}
И так далее. Я пытался структурировать данные раньше времени, прежде чем отправлять его на D3.js, используя Ruby, чтобы разделить строки на отдельные символы, но я застрял, пытаясь понять, как структурировать это в иерархическом JSON.
file_contents = File.open("single.txt", "r")
file_contents.readlines.each do |line|
parse = line.scan(/[A-Za-z][^A-Za-z]*/)
puts parse
end
Я мог бы сделать это в браузере с помощью d3.js вместо этого, я просто еще не пробовал.
Просто интересно, есть ли какие-либо предложения, указатели или существующие инструменты/скрипты, которые могут мне помочь. Благодаря!
Обновление 2014-10-02
Так я провел немного времени, пытаясь это в Python, но я продолжаю застревать. Я также не обращаю внимание на элементы «детей». Какие-либо предложения?
Покушение Один
#!/usr/bin/python
from collections import defaultdict
import json
def tree():
return defaultdict(tree)
file_out = open('out.txt', 'wb')
nested = defaultdict(tree)
with open("single.txt") as f:
for line in f:
o = list(line)
char_lst = []
for chars in o:
d = {}
d['name']=chars
char_lst.append(d)
for word in d:
node = nested
for char in word:
node = node[char.lower()]
print node
print(json.dumps(nested))
Покушение Два
#!/usr/bin/python
from collections import defaultdict
import json
def tree():
return defaultdict(tree)
nested = defaultdict(tree)
words = list(open("single.txt"))
words_output = open("out.json", "wb")
for word in words:
node = nested
for char in word:
node = node[char.lower()]
def print_nested(d, indent=0):
for k, v in d.iteritems():
print '{}{!r}:'.format(indent * ' ', k)
print_nested(v, indent + 1)
print_nested(nested)
Вам нужно создать кучу словарей, а затем сохранить их в списках. Я не могу сказать о Ruby, но Python делает это очень просто. –