behrang / YamlSwift

Load YAML and JSON documents using Swift
MIT License
404 stars 97 forks source link

"Expected dedent" error when trying top parse YAML file. #2

Closed atmonello closed 9 years ago

atmonello commented 9 years ago

Greetings!

Using your API to parse YAML files in our project, but getting a "expected dedent, near " error in some random files.

For example, trying to parse the following text:

título: "Freios ABS"
inédita: False
fonte: "Enem 2012, Caderno amarelo, Questão 52"

área: "Ciências da Natureza e suas Tecnologias"
disciplina: "Física"

pergunta: |
  Os freios ABS são uma importante medida de segurança no trânsito, os quais funcionam para impedir o travamento das rodas do carro quando o sistema de freios é acionado, liberando as rodas quando estão no limiar do deslizamento. Quando as rodas travam, a força de frenagem é governada pelo atrito cinético.

  As representações esquemáticas da força de atrito *f*𝒂𝑡 entre os pneus e a pista, em função da pressão *p* aplicada no pedal de freio, para carros sem ABS e com ABS, respectivamente, são:

respostas:
  a: "![A](./A.png)"

  b: "![B](./B.png)"

  c: "![C](./C.png)"

  d: "![D](./D.png)"

  e: "![E](./E.png)"

correta: "a"

dificuldade:
  média: 0.42
  desvio padrão: 0.15

Returns the following error:

expected dedent, near "respostas:\n \n a: \"![A](./A.png)\"\n \n b: \"![B](./"

Is this a known issue, and do you have any workaround for it? Thank you very much!

behrang commented 9 years ago

Problem was the string *f*𝒂𝑡 which contains unicode surrogates.

Swift regular expressions do not work as expected with strings containing surrogates. The solution was to switch to UTF-16 while working with regular expressions.

atmonello commented 9 years ago

@behrang Thanks for the quick response!

The fix really worked for this question I sampled. But the problem persists with other files we have been trying to parse, like this one below:

título: "Tempo de espera no porto de Santos"
inédita: False
fonte: "Enem 2012, Caderno Amarelo, Questão 28"

área: "Ciências Humanas e suas Tecnologias"
disciplina: "Geografia"

pergunta: |
  A soma do tempo gasto por todos os navios de carga na espera para atracar no porto de Santos é igual a 11 anos — isso, contando somente o intervalo de janeiro a outubro de 2011. O problema não foi registrado somente neste ano. Desde 2006 a perda de tempo supera uma década.

  ***Folha de S. Paulo**, 25 dez. 2011 (adaptado).*

  A situação descrita gera consequências em cadeia, tanto para a produção quanto para o transporte. No que se refere à territorialização da produção no Brasil contemporâneo, uma dessas consequências é a

respostas:
  a: "realocação das exportações para o modal aéreo em função da rapidez."

  b: "dispersão dos serviços financeiros em função da busca de novos pontos de importação."

  c: "redução da exportação de gêneros agrícolas em função da dificuldade para o escoamento."

  d: "priorização do comércio com países vizinhos em função da existência de fronteiras terrestres.

  e: "estagnação da indústria de alta tecnologia em função da concentração de investimentos na infraestrutura de circulação."

correta: "c"

dificuldade:
  média:0.7
  desvio padrão: 0.17

It returns the following error when trying to parse:

expected dedent, near "estagnação da indústria de alta tecnologia em fun "

If you want to take a look on the file, here is the Dropbox link for it.

Thank you again for your attention!

behrang commented 9 years ago

This YAML file is invalid. It has 2 problems.

First, the line starting with d: "priorização... does not end with a double quote. It should.

Second, the line containing média:0.7 needs a space between the colon and zero.

If you fix these two problems, it will parse correctly.

atmonello commented 9 years ago

Thanks again @behrang!

So many files we let these small errors go unnoticed.

Just adding an extra info here, this following file:

título: "Características compartilhadas entre humanos e outros animais"
inédita: False
fonte: "Enem 2012, Caderno amarelo, questão 100"

área: "Linguagens e suas Tecnologias"
disciplina: "Português"

pergunta:|
  ![macaco](./macaco.png)
  * **Extra, extra. Este macaco é humano.** *

  **Não somos tão especiais**

  Todas as características tidas como exclusivas dos humanos são compartilhadas por outros animais, ainda que em menor grau.

  INTELIGÊNCIA
  A ideia de que somos os únicos animais racionais tem sido destruída desde os anos 40. A maioria das aves e mamíferos tem algum tipo de raciocínio.

  AMOR
  O amor, tido como o mais elevado dos sentimentos, é parecido em várias espécies, como os corvos, que também criam laços duradouros, se preocupam com o ente querido e ficam de luto depois de sua morte.

  CONSCIÊNCIA
  Chimpanzés se reconhecem no espelho. Orangotangos observam e enganam humanos distraídos. Sinais de que sabem quem são e se distinguem dos outros. Ou seja, são conscientes.

  CULTURA
  O primatologista Frans de Waal juntou vários exemplos de cetáceos e primatas que são capazes de aprender novos hábitos e de transmiti-los para as gerações seguintes. O que é cultura se não isso?

  *BURGIERMAN, D. **Superinteressante,** n. 190, jul. 2003.

  O título do texto traz o ponto de vista do autor sobre a suposta supremacia dos humanos em relação aos outros animais. As estratégias argumentativas utilizadas para sustentar esse ponto de vista são

respostas:

  a: "definição e hierarquia."

  b: "exemplificação e comparação."

  c: "causa e consequência."

  d: "finalidade e meios."

  e: "autoridade e modelo."

correta: "b"

dificuldade: 
  média: 0.72
  desvio padrão: 0.19

Was returning the following error:

expected colon, near "respostas:\n  \n  a: \"definição e hierarquia.\"\n  \n  "

I solved this by rewriting everything from pergunta: to correta: and it worked! Think it was something about formatting or some bugged characters, but since it is working now, no big deal anymore.

Cheers and thanks again!

behrang commented 9 years ago

You're welcome. Happy to hear that.