8 votos

¿Qué es un buen propósito general texto sin formato de datos como la que se usa para Bibtex?

Contexto

Estoy escribiendo un par de opción múltiple preguntas de práctica y me gustaría guardarlas en un simple texto sin formato de datos. He utilizado previamente delimitado, sino que hace que la edición en un editor de texto un poco torpe. Me gustaría utilizar un formato un poco como bibtex.

E. g.,

@Article{journals/aim/Sloman99,
  title =   "Review of Affective Computing",
  author =  "Aaron Sloman",
  journal = "AI Magazine",
  year =    "1999",
  number =  "1",
  volume =  "20",
  url = "http://dblp.uni-trier.de/db/journals/aim/aim20.html#Sloman99",
  pages =   "127--133",
}

Propiedades importantes parecen ser las siguientes:

  • Los datos se compone de los registros
  • Cada registro tiene varios pares atributo-valor
  • Cada par atributo-valor se puede grabar en una nueva línea, pero puede abarcar varias líneas
  • Fácil de introducir manualmente los datos de texto en un editor de texto
  • Fácilmente las herramientas disponibles para convertir en datos tabulares

Por ejemplo, aquí hay algo un poco como lo que podría funcionar

@
id: 1
question: 1 + 1
a: 1
b: 2
c: 3
d: 4
correct: b

@
id: 2
question: What is the capital city of the country renowned for koalas, 
          emus, and kangaroos?
a: Canberra
b: Melbourne
c: Sydney
d: Australia
correct: a

Mientras estoy interesado en el contexto específico de la escritura de preguntas de opción múltiple, yo también estoy interesado en el tema más amplio de la representación de datos en este o un tipo similar de formato.

Reflexiones Iniciales

Mis pensamientos iniciales incluyen los siguientes:

  • YAML
  • JSON
  • Datos delimitados con campo personalizado y delimitadores de registro que permitan multi-línea de registros
  • Un formato de archivo personalizado con algún tipo de analizador personalizado

Sólo he tenido un rápido vistazo a YAML y JSON; Mis primeras impresiones son que podría ser de sobra. Personalizado delimitar puede ser bueno, pero que probablemente se requieren todos los campos de estar presentes en un orden coherente para todos los registros. Escribiendo mi propio analizador suena un poco engorroso.

10voto

Abbey Puntos 11

¿Por qué no usar XML? Hay muchos buenos analizadores que se traduce archivos XML para las estructuras de datos, incluso uno para R ( http://cran.r-project.org/web/packages/XML/index.html ).

El formato se parece a esto (ejemplo tomado de http://www.w3schools.com/xml/default.asp ).

<?xml version="1.0"?>
<notas>
<nota>
<para>Tove</a>
<de>Jani</de>
<heading>Aviso</heading>
 <cuerpo>no te olvides de mí este fin de semana!</body>
</note>
<nota>
<para>Janis</a>
<desde>el Cardenal</de>
<heading>Aviso</heading>
 <cuerpo>no te olvides de mí el próximo fin de semana!</body>
</note>
</notas>

E. g, utilizando el paquete XML:

z=xmlTreeParse("test.xml")
z$doc$children$notes

da acceso a las notas completas sobre el cuerpo,

z$doc$children$notes[1]

es sólo el primer nodo, y así sucesivamente...

6voto

DIA Tom Puntos 136

Me gustaría ir con YAML. Sencillo para editar y tiene un montón de los analizadores en diferentes idiomas:

---
- 
  question: 1 + 1
  incorrect:
    - 1
    - 3
    - 4
  correct: 2
-
 question: What is the capital city of the country renowned for koalas, emus, and kangaroos?
 incorrect:
   - Melbourne
   - Sydney
   - Australia
 correct: Canberra

Entonces, usted puede escribir un pequeño script para combinar al azar incorrecto con las respuestas correctas y la salida de Látex sugerido en DQdlM la respuesta.

EDIT: Este script de ruby:

require 'yaml'

questions = YAML.load(File.read(ARGV.first))
questions.each_with_index do |question,index|
  answers = question['incorrect'].map{|i| '    \choice ' + i.to_s }
  answers << '    \CorrectChoice ' + question['correct'].to_s

  output = ["\\question{#{index + 1}}"]
  output << question['question']
  output << "  \\begin{choices}"
  output << answers.sort_by{rand}
  output << "  \\end{choices}"
  output << "\n"

  puts output.flatten.join("\n")
end

Producirá la siguiente salida

\question{1}
1 + 1
  \begin{choices}
    \choice 4
    \choice 1
    \choice 3
    \CorrectChoice 2
  \end{choices}

\question{2}
What is the capital city of the country renowned for koalas, emus, and kangaroos?
  \begin{choices}
    \choice Melbourne
    \choice Sydney
    \CorrectChoice Canberra
    \choice Australia
  \end{choices}

4voto

jerhinesmith Puntos 5425

Org Modo puede hacer eso. Una manera sería como este:

#+COLUMNS: %id %a %b %c %d %correct

* 1 + 1  
    :PROPERTIES:
    :id:       1
    :a:        1
    :b:        2
    :c:        3
    :d:        4
    :correct:  b
    :END:

* What is the capital city of the country renowned for koalas, emus, and kangaroos?
    :PROPERTIES:
    :id:       2
    :a:        Canberra
    :b:        Melbourne
    :c:        Sydney
    :d:        Australia
    :correct:  a
    :END:

Si usted desea inspeccionar visualmente un rápido resumen de la tabla, a continuación, inserte el siguiente

* The column view

  #+BEGIN: columnview :hlines 1 :id global

  #+END:

Coloque el cursor en la #+BEGIN bloque y hacer C-c C-x C-u para obtener

#+BEGIN: columnview :hlines 1 :id global
| id | a        | b         | c      | d         | correct |
|----+----------+-----------+--------+-----------+---------|
|  1 | 1        | 2         | 3      | 4         | b       |
|  2 | Canberra | Melbourne | Sydney | Australia | a       |
|    |          |           |        |           |         |
#+END:

y si desea importar (a R, por ejemplo), a continuación, introduzca un nombre de tabla como esta:

#+BEGIN: columnview :hlines 1 :id global
#+tblname: simpleDF
| id | a        | b         | c      | d         | correct |
|----+----------+-----------+--------+-----------+---------|
|  1 | 1        | 2         | 3      | 4         | b       |
|  2 | Canberra | Melbourne | Sydney | Australia | a       |
#+END:

a continuación, introduzca y ejecute la siguiente R bloque de código con C-c C-c:

#+begin_src R :session *R* :var df=simpleDF :colnames yes
head(df)
#+end_src

esto le da

#+results:
| id | a        | b         | c      | d         | correct |
|----+----------+-----------+--------+-----------+---------|
|  1 | 1        | 2         | 3      | 4         | b       |
|  2 | Canberra | Melbourne | Sydney | Australia | a       |

La buena noticia es que la trama de datos en df está almacenado en el activo *R* sesión y está disponible para el post-proceso como más te guste. Todo esto se dice, si fuera yo, yo empezaría con los exámenes de paquete (en R) para la aplicación específica de almacenamiento/escritura de preguntas de opción múltiple, a pesar de que YAML ejemplo se ve muy cool.

4voto

Compile This Puntos 4684

Esto no puede abordar plenamente las aplicaciones más allá de sus preguntas de elección múltiple, pero no hay un examen de clase disponibles para el Látex.

Preguntas de opción múltiple se forman como este:

\question[2]
The fascile of a nerve is surrounded by what connective tissue layer?
  \begin{choices}
    \choice endoneurium
    \choice epineurium
    \CorrectChoice perineruium
    \choice neurolemma
    \choice none of the above
  \end{choices}

Mediante la inclusión de \printanswers en su preámbulo subraya la respuesta correcta.

4voto

Ed Hagen Puntos 41

Aquí hay un par de ideas:

  1. El uso de R en sí:

    exam = list(question1 = list(
                            question='Here is the first question',
                            answers = list('a' = 'Here is the first answer',
                                           'b' = 'here is the second answer',
                                           'c' = 'Here is the third answer'
                                           )
                                 )
               )
    
    > exam$question1
    > exam$question1$question
    > exam$question1$answers
    > exam$question1$answers$a
    
  2. Uso reStructuredText, que es un lenguaje de marcado ligero, similar a la de las rebajas, que puede ser analizado en un DOM (Python), por ejemplo:

    Here is the first question.
    
    * First answer.
    * Second answer.
    * Third answer.
    

Hay un rst2xml escritor que convierte la anterior:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "+//IDN docutils.sourceforge.net//DTD Docutils Generic//EN//XML" "http://docutils.sourceforge.net/docs/ref/docutils.dtd">
  <!-- Generated by Docutils 0.7 -->
  <document source="tmp.rst">
    <paragraph>Here is the first question.</paragraph>
    <bullet_list bullet="*">
      <list_item>
        <paragraph>First answer.</paragraph>
      </list_item>
      <list_item>
        <paragraph>Second answer.</paragraph>
      </list_item>
      <list_item>
        <paragraph>Third answer.</paragraph>
      </list_item>
    </bullet_list>
  </document>

También hay un rst2latex escritor, por lo que su análisis puede ser fácilmente formato para la impresión, y usted puede tratar los datos usando python y el modelo de objetos de documento.

La ventaja de esta opción es que la primera es fácil de leer y escribir, a diferencia de XML, pero los datos todavía está estructurado para su uso en R, Python, etc.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X