Route calculation is not accurate while importing route from a list of points - HERE SDK for Android/iOS(Premium Edition) - here-api

We're trying to use CoreRouter.calculateRoute(List<GeoCoordinate>, RouteOptions, Listener) method as documented here to calculate a route from a list of points. The list of points is from a GPX file exported from Google map.
Please check the origin route on google map here
origin route
(https://www.google.com/maps/d/u/0/edit?mid=1jlwfml-kg0QLW7vHB4aMw6pDjvTevHU&usp=sharing)
The result we got in HERE MAP is like this:
HERE Map result
We compared the route points one by one between Google Map and HERE Map, and found that the point does not sit perfectly on a road on Here map as it does on Google map. Please check the comparison here: Comparison
The list of points:
<trkpt lat="37.3665039" lon="-121.9179512">
<name>TP0</name>
</trkpt>
<trkpt lat="37.3663126" lon="-121.9178105">
<name>TP1</name>
</trkpt>
<trkpt lat="37.3660126" lon="-121.9175858">
<name>TP2</name>
</trkpt>
<trkpt lat="37.3657063" lon="-121.9173579">
<name>TP3</name>
</trkpt>
<trkpt lat="37.3653819" lon="-121.9171101">
<name>TP4</name>
</trkpt>
<trkpt lat="37.3652228" lon="-121.916993">
<name>TP5</name>
</trkpt>
<trkpt lat="37.3653404" lon="-121.9167218">
<name>TP6</name>
</trkpt>
<trkpt lat="37.3657065" lon="-121.9159425">
<name>TP7</name>
</trkpt>
<trkpt lat="37.3659858" lon="-121.9153481">
<name>TP8</name>
</trkpt>
<trkpt lat="37.366333" lon="-121.9146232">
<name>TP9</name>
</trkpt>
<trkpt lat="37.3663824" lon="-121.9145151">
<name>TP10</name>
</trkpt>
<trkpt lat="37.3666919" lon="-121.9139078">
<name>TP11</name>
</trkpt>
<trkpt lat="37.366698" lon="-121.9137683">
<name>TP12</name>
</trkpt>
<trkpt lat="37.3666968" lon="-121.913702">
<name>TP13</name>
</trkpt>
<trkpt lat="37.3666941" lon="-121.9136539">
<name>TP14</name>
</trkpt>
<trkpt lat="37.3666879" lon="-121.9136134">
<name>TP15</name>
</trkpt>
<trkpt lat="37.3666756" lon="-121.913573">
<name>TP16</name>
</trkpt>
<trkpt lat="37.3666331" lon="-121.913451">
<name>TP17</name>
</trkpt>
<trkpt lat="37.3664775" lon="-121.9133349">
<name>TP18</name>
</trkpt>
<trkpt lat="37.3659049" lon="-121.9129044">
<name>TP19</name>
</trkpt>
<trkpt lat="37.3658757" lon="-121.9129628">
<name>TP20</name>
</trkpt>
Is there a way to calculate the route more accurate using CoreRouter.calculateRoute(List<GeoCoordinate>, RouteOptions, Listener) method?
The code in our project is like below:
val TESTING_WAYPOINTS = arrayOf(
GeoCoordinate(37.3665039, -121.9179512),
GeoCoordinate(37.3663126, -121.9178105),
GeoCoordinate(37.3660126, -121.9175858),
GeoCoordinate(37.3657063, -121.9173579),
GeoCoordinate(37.3653819, -121.9171101),
GeoCoordinate(37.3652228, -121.916993),
GeoCoordinate(37.3653404, -121.9167218),
GeoCoordinate(37.3657065, -121.9159425),
GeoCoordinate(37.3659858, -121.9153481),
GeoCoordinate(37.366333, -121.9146232),
GeoCoordinate(37.3663824, -121.9145151),
GeoCoordinate(37.3666919, -121.9139078),
GeoCoordinate(37.366698, -121.9137683),
GeoCoordinate(37.3666968, -121.913702),
GeoCoordinate(37.3666941, -121.9136539),
GeoCoordinate(37.3666879, -121.9136134),
GeoCoordinate(37.3666756, -121.913573),
GeoCoordinate(37.3666331, -121.913451),
GeoCoordinate(37.3664775, -121.9133349),
GeoCoordinate(37.3659049, -121.9129044),
GeoCoordinate(37.366377, -121.9137508),
GeoCoordinate(37.3658757, -121.9129628),
)
// set route options
val mRouteOptions = RouteOptions().apply {
this.transportMode = RouteOptions.TransportMode.CAR
this.routeCount = navigationOptions.routeCount
this.routeType = navigationOptions.routeType
setTunnelsAllowed(navigationOptions.tunnelAllowed)
setTollRoadsAllowed(navigationOptions.tollAllowed)
setHighwaysAllowed(navigationOptions.highwaysAllowed)
setFerriesAllowed(navigationOptions.boatsAllowed)
setDirtRoadsAllowed(navigationOptions.dirtRoadsAllowed)
this.locale = Locale("en")
})
fun calculateRoute(listener: CoreRouter.Listener) {
mCoreRouterListener = listener
// force using the preset waypoints
val presetWaypoints = TESTING_WAYPOINTS
for (p in presetWaypoints) {
Log.d(TAG, "[TRACK]: ${p.latitude} ${p.longitude}")
mRoutePoints.add(p)
}
mCoreRouter.calculateRoute(mRoutePoints, mRouteOptions, this)
}

As we see lot of options are used in the request. So the router will try to find the best optimized route based on the options provided in the request. If you want to compare the requests with any other service, just use the plain requests without any restrictions in both services.
// set route options
val mRouteOptions = RouteOptions().apply {
this.transportMode = RouteOptions.TransportMode.CAR
this.routeCount = navigationOptions.routeCount
this.routeType = navigationOptions.routeType
setTunnelsAllowed(navigationOptions.tunnelAllowed)
setTollRoadsAllowed(navigationOptions.tollAllowed)
setHighwaysAllowed(navigationOptions.highwaysAllowed)
setFerriesAllowed(navigationOptions.boatsAllowed)
setDirtRoadsAllowed(navigationOptions.dirtRoadsAllowed)
this.locale = Locale("en")
})

Related

format helpText in shinydashboard::box

I have a helpText widget in a shinydashboard box in my shiny app.
A helpText outside a shinydashboard::box() can easily be formatted, however, in the box(), new lines as well as other HTML elements, are not respected.
please find below my code and the image I currently am getting.
validation_rules_text_cas<-helpText('Please enter one string per line.', # ----
"A CAS Registry Number includes up to 10 digits which are separated in 3 hyphens.",
'- The first part of the number, starting from the left, has 2 to 7 digits',
'- The second part has 2 digits',
'- The final part consists of a single check digit.')
validation_rules_text_inchikey<-helpText('Please enter one string per line.',
"International Chemical Identifier KEY validation rules. InChIKey consists of several distinct components:",
"- 14 characters resulting from a hash of the connectivity information of the InChI,encodes molecular skeleton (connectivity),",
"- followed by a hyphen,",
"- followed by 8 characters resulting from a hash of the remaining layers of the InChI,",
"- Encodes proton positions (tautomers), stereochemistry, isotopomers, reconnected layer,",
"- followed by a single character indicating the kind of InChIKey,",
"- followed by a single character indicating the version of InChI used,",
"- another hyphen,",
"- followed by single character indicating protonation.(Source: Wikipedia).",
" AAAAAAAAAAAAAA-BBBBBBBBCD-E")
tabPanel("Batch Search", #----
fluidRow(column(5),
column(7,# helpText----
box(title=' CAS Validation Rules',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
validation_rules_text_cas
),
box(title='Inchikey Validation Rules',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
validation_rules_text_inchikey
),
box(title='SMILES Validation Rules',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
validation_rules_text_smiles
),
box(title='Validation Rules - OTHER',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
validation_rules_text_other
))
))
How do I add new lines breaks (tags$br()) or new lines (tags$hr())? Thank you
Based on this this answer, you can use renderUI in the server function, and htmlOutput in the ui. So for example:
output$validrules <- uiOutput({
HTML(paste(
p('Please enter one string per line.'),
p("A CAS Registry Number includes up to 10 digits which are separated in 3 hyphens."),
p('- The first part of the number, starting from the left, has 2 to 7 digits'),
p('- The second part has 2 digits'),
p('- The final part consists of a single check digit.')
))
})
Then:
box(title=' CAS Validation Rules',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
htmlOutput("validrules")
)
Using \n in renderText will do it. Try this
ui <- fluidPage(
tags$head(tags$style("#inchikey{color: blue;
font-size: 16px;
line-height: 0.6;
}"
)),
tabPanel("Batch Search", #----
fluidRow(column(5),
column(7,# helpText----
box(title=' CAS Validation Rules',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
validation_rules_text_cas
),
box(title='Validation Rules - OTHER',width=12,
collapsible = TRUE,
collapsed=TRUE,
status = 'primary',
verbatimTextOutput("inchikey")
#validation_rules_text_inchikey
)
)
))
)
server <- function(input, output, session) {
output$inchikey <- renderText({
paste("Please enter one string per line., \n
International Chemical Identifier KEY validation rules. InChIKey consists of several distinct components: \n
- 14 characters resulting from a hash of the connectivity information of the InChI,encodes molecular skeleton (connectivity), \n
- followed by a hyphen, \n
- followed by 8 characters resulting from a hash of the remaining layers of the InChI, \n
- Encodes proton positions (tautomers), stereochemistry, isotopomers, reconnected layer, \n
- followed by a single character indicating the kind of InChIKey, \n
- followed by a single character indicating the version of InChI used, \n
- another hyphen, \n
- followed by single character indicating protonation.(Source: Wikipedia). \n
AAAAAAAAAAAAAA-BBBBBBBBCD-E", sep="\n")
})
}
shinyApp(ui = ui, server = server)

I need to list keys in a dictionary that have the same value by user input

My task is to ask a user for an input (an instrument) and receive a list of all the musicians that play that instrument. Here is my code:
q = input("What instrument do you need: ")
musician_lib = { "Nick Beggs": "Bass",
"Geddy Lee": "Bass",
"John Myung": "Bass",
"Steven Wilson": "Guitar",
"Neil Peart": "Drums",
"John Petrucci": "Guitar",
"Mike Portnoy": "Drums",
"Kevin Moore": "Keyboards",
"Derek Sherinian": "Keyboards",
"Jordan Rudess": "Keyboards",
"Neal Schon": "Guitar",
"Steve Perry": "Vox",
"Alex Lifeson": "Guitar",
"James Labrie": "Vox"
}
if q == musician_lib.value:
print("You should call " + (musician_lib()))
I have tried various iterations of calling value or key but I'm getting an error:
AttributeError: 'dict' object has no attribute 'value'
To be clear, I would like to see an output similar to this:
What instrument do you need: (user input) Bass
You should call:
Nick Beggs
Geddy Lee
John Myung
Dictionaries in python indeed do not have a value attribute which is why you're getting the AttributeError, they do however have a values() method that will give you a list of the values in the dict. Dictionaries also support key() and items() methods which return the keys in the dictionary and the key, value pairs in the dictionary respectively.
From there I would recommend looking into list comprehension to get the keys that match the value the user specified value.
musicians = [key for key, value in musician_lib.items() if value == q]

Extracting a dataframe or table from text in R

This is a challenging question, as it might be somehow difficult for the variability that is present. Let's start with the example:
example <- list(c("Birth Centenary of K.S.Stanislavsky.Series:Birth CentenariesCatalog codes:Mi:SU 2710, Sn:SU 2695, Yt:SU 2626, Sg:SU 2797, AFA:SU 2698Variants:Click to see variantsThemes:Actors | Anniversaries and Jubilees | Famous People | MenIssued on:1963-01-15Size:30 x 42 mmColors:Blackish grey greenFormat:StampEmission:CommemorativePerforation:line 12½Printing:RecessPaper:hard thick whiteWatermark:UnwmkFace value:4 Russian kopekPrint run:2,000,000Score:29%\tAccuracy: Very HighBuy Now:2 sale offers from US$ 0.16",
"Birth Centenary of A.S.Serafimovich.Series:Birth CentenariesCatalog codes:Mi:SU 2711, Sn:SU 2696, Yt:SU 2627, Sg:SU 2800, AFA:SU 2699Themes:Anniversaries and Jubilees | Authors | Famous People | Literary People (Poets and Writers) | Literature | MenIssued on:1963-01-19Size:28 x 40 mmFormat:StampEmission:CommemorativePerforation:frame 11½Printing:PhotogravurePaper:ordinaryFace value:4 Russian kopekPrint run:2,500,000Score:26%\tAccuracy: Very HighBuy Now:3 sale offers from US$ 0.11",
"Children in nurserySeries:Soviet ChildrenCatalog codes:Mi:SU 2712, Sn:SU 2697, Yt:SU 2629, Sg:SU 2806, AFA:SU 2700Themes:ChildrenIssued on:1963-01-31Size:42 x 28 mmColors:MulticolorFormat:StampEmission:CommemorativePerforation:comb 11½Printing:PhotogravureFace value:4 Russian kopekPrint run:3,000,000Score:27%\tAccuracy: Very HighDescription:Designer: A. Shmidshtein. Paper: ordinary.Buy Now:2 sale offers from US$ 0.08",
"Children with nurseSeries:Soviet ChildrenCatalog codes:Mi:SU 2713, Sn:SU 2698, Yt:SU 2628, Sg:SU 2807, AFA:SU 2701Themes:ChildrenIssued on:1963-01-31Size:42 x 28 mmFormat:StampEmission:CommemorativePerforation:comb 11½Printing:PhotogravureFace value:4 Russian kopekPrint run:3,000,000Score:25%\tAccuracy: Very HighDescription:Designer: A. Shmidshtein. Paper: ordinary.Buy Now:3 sale offers from US$ 0.08",
"Pioneer campSeries:Soviet ChildrenCatalog codes:Mi:SU 2714, Sn:SU 2699, Yt:SU 2630, Sg:SU 2808, AFA:SU 2702Themes:ChildrenIssued on:1963-01-31Size:42 x 28 mmFormat:StampEmission:CommemorativePerforation:comb 11½Printing:PhotogravureFace value:4 Russian kopekPrint run:3,000,000Score:22%\tAccuracy: Very HighDescription:Designer: A. Shmidshtein. Paper: ordinary.Buy Now:4 sale offers from US$ 0.11",
"Soviet Children.Series:Soviet ChildrenCatalog codes:Mi:SU 2715, Sn:SU 2700, Yt:SU 2631, Sg:SU 2809, AFA:SU 2703Themes:ChildrenIssued on:1963-01-31Size:40 x 28 mmFormat:StampEmission:CommemorativePerforation:comb 11½Printing:PhotogravurePaper:ordinaryFace value:4 Russian kopekPrint run:3,000,000Score:25%\tAccuracy: Very HighBuy Now:2 sale offers from US$ 0.08",
"Dymkov's and Zagorsk toysSeries:Decorative ArtsCatalog codes:Mi:SU 2716, Sn:SU 2701, Yt:SU 2632, Sg:SU 2810, AFA:SU 2704Themes:Art | ToysIssued on:1963-01-31Size:30 x 42 mmFormat:StampEmission:CommemorativePerforation:comb 12 x 12½Printing:Offset lithographyFace value:4 Russian kopekPrint run:3,000,000Score:22%\tAccuracy: Very HighDescription:Designer: E. Komarov. Paper: ordinary.Buy Now:2 sale offers from US$ 0.11",
"Oposhnya potterySeries:Decorative ArtsCatalog codes:Mi:SU 2717, Sn:SU 2702, Yt:SU 2633, Sg:SU 2811, AFA:SU 2705Themes:ArtIssued on:1963-01-31Size:30 x 42 mmFormat:StampEmission:CommemorativePerforation:comb 12 x 12½Printing:Offset lithographyFace value:6 Russian kopekPrint run:3,000,000Score:24%\tAccuracy: Very HighDescription:Designer: E. Komarov. Paper: ordinary.Buy Now:3 sale offers from US$ 0.08",
"Embossing booksSeries:Decorative ArtsCatalog codes:Mi:SU 2718, Sn:SU 2703, Yt:SU 2634, Sg:SU 2812, AFA:SU 2706Themes:Art | BooksIssued on:1963-01-31Size:30 x 42 mmFormat:StampEmission:CommemorativePerforation:comb 12 x 12½Printing:Offset lithographyFace value:10 Russian kopekPrint run:3,000,000Score:27%\tAccuracy: Very HighDescription:Designer: E. Komarov. Paper: ordinary.Buy Now:2 sale offers from US$ 0.44",
"Decorative Arts.Series:Decorative ArtsCatalog codes:Mi:SU 2719, Sn:SU 2704, Yt:SU 2635, Sg:SU 2813, AFA:SU 2707Themes:ArtIssued on:1963-01-31Size:30 x 42 mmFormat:StampEmission:CommemorativePerforation:comb 12 x 12½Printing:Offset lithographyPaper:ordinaryFace value:12 Russian kopekPrint run:3,000,000Score:26%\tAccuracy: Very HighBuy Now:3 sale offers from US$ 0.16"
), NULL, NULL, NULL)
As you can see, it is a list of 4 objects. We can make a vector by unlisting them with unlist(). That's up to you.
The point is that each element comes from a table with his title like this one:
I would like to obtain the same table or dataframe from the text. I observed several points on how the infor is structured:
There are combined words with the difference of the Capital letter, which corresponds to the start of the value of the row and the end of the last word.
Some variables (like Catalog codes and Themes) are formed by different elements.
Occasionally, there might be some rows that can be unpresent in other elements. In the image above, the row Variants appears in that element but not in the rest.
I tried with some functions of the tidyverse environment, but this situation exceeds my capabilities.
It seems like your data stems from webscraping. I'd suggest checking out rvest::html_table() to try and get better formatted results. Otherwise its going to be very messy (i.e. regex).
Very, very messy example code:
untangle <- function(element) {
Title = gsub("^(.*)Series:.*", "\\1", element)
Series = gsub(".*Series:(.*)(Catalog codes:.*)", "\\1", element)
CatalogCodes = gsub(".*Catalog codes:(.*)(Variants|Themes.*)", "\\1", element)
return(data.frame(Title, Series, CatalogCodes, stringsAsFactors=FALSE))
}
for (e in unlist(example)) {
print(untangle(e))
}

Lower Case Certain Words R

I need to convert certain words to lower case. I am working with a list of movie titles, where prepositions and articles are normally lower case if they are not the first word in the title. If I have the vector:
movies = c('The Kings Of Summer', 'The Words', 'Out Of The Furnace', 'Me And Earl And The Dying Girl')
What I need is this:
movies_updated = c('The Kings of Summer', 'The Words', 'Out of the Furnace', 'Me and Earl and the Dying Girl')
Is there an elegant way to do this without using a long series of gsub(), as in:
movies_updated = gsub(' In ', ' in ', movies)
movies_updated = gsub(' In', ' in', movies_updated)
movies_updated = gsub(' Of ', ' of ', movies)
movies_updated = gsub(' Of', ' of', movies_updated)
movies_updated = gsub(' The ', ' the ', movies)
movies_updated = gsub(' the', ' the', movies_updated)
And so on.
In effect, it appears that you are interested in converting your text to title case. This can be easily achieved with use of the stringi package, as shown below:
>> stringi::stri_trans_totitle(c('The Kings of Summer', 'The Words', 'Out of the Furnace'))
[1] "The Kings Of Summer" "The Words" "Out Of The Furnace"
Alternative approach would involve making use of the toTitleCase function available in the the tools package:
>> tools::toTitleCase(c('The Kings of Summer', 'The Words', 'Out of the Furnace'))
[1] "The Kings of Summer" "The Words" "Out of the Furnace"
Though I like #Konrad's answer for its succinctness, I'll offer an alternative that is more literal and manual.
movies = c('The Kings Of Summer', 'The Words', 'Out Of The Furnace',
'Me And Earl And The Dying Girl')
gr <- gregexpr("(?<!^)\\b(of|in|the)\\b", movies, ignore.case = TRUE, perl = TRUE)
mat <- regmatches(movies, gr)
regmatches(movies, gr) <- lapply(mat, tolower)
movies
# [1] "The Kings of Summer" "The Words"
# [3] "Out of the Furnace" "Me And Earl And the Dying Girl"
The tricks of the regular expression:
(?<!^) ensures we don't match a word at the beginning of a string. Without this, the first The of movies 1 and 2 will be down-cased.
\\b sets up word-boundaries, such that in in the middle of Dying will not match. This is slightly more robust than your use of space, since hyphens, commas, etc, will not be spaces but do indicate the beginning/end of a word.
(of|in|the) matches any one of of, in, or the. More patterns can be added with separating pipes |.
Once identified, it's as simple as replacing them with down-cased versions.
Another example of how to turn certain words to lower case with gsub (with a PCRE regex):
movies = c('The Kings Of Summer', 'The Words', 'Out Of The Furnace', 'Me And Earl And The Dying Girl')
gsub("(?!^)\\b(Of|In|The)\\b", "\\L\\1", movies, perl=TRUE)
See the R demo
Details:
(?!^) - not at the start of the string (it does not matter if we use a lookahead or lookbehind here since the pattern inside is a zero-width assertion)
\\b - find leading word boundary
(Of|In|The) - capture Of or In or The into Group 1
\\b - assure there is a trailing word boundary.
The replacement contains the lowercasing operator \L that turns all the chars in the first backreference value (the text captured into Group 1) to lower case.
Note it can turn out a more flexible approach than using tools::toTitleCase. The code part that keeps specific words in lower case is:
## These should be lower case except at the beginning (and after :)
lpat <- "^(a|an|and|are|as|at|be|but|by|en|for|if|in|is|nor|not|of|on|or|per|so|the|to|v[.]?|via|vs[.]?|from|into|than|that|with)$"
If you only need to apply lowercasing and do not care about the other logic in the function, it might be enough to add these alternatives (do not use ^ and $ anchors) to the regex at the top of the post.

How to read csv with double quotes from WoS?

I'm trying to read CSV files from the citation report of Web of Science. This is the structure of the file:
TI=clinical case of cognitive dysfunction syndrome AND CU=MEXICO
null
Timespan=All years. Indexes=SCI-EXPANDED, SSCI, A&HCI, ESCI.
"Title","Authors","Corporate Authors","Editors","Book Editors","Source Title","Publication Date","Publication Year","Volume","Issue","Part Number","Supplement","Special Issue","Beginning Page","Ending Page","Article Number","DOI","Conference Title","Conference Date","Total Citations","Average per Year","1988","1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016"
""Didy," a clinical case of cognitive dysfunction syndrome","Heiblum, Moises; Labastida, Rocio; Chavez Gris, Gilberto; Tejeda, Alberto","","","","JOURNAL OF VETERINARY BEHAVIOR-CLINICAL APPLICATIONS AND RESEARCH","MAY-JUN 2007","2007","2","3","","","","68","72","","10.1016/j.jveb.2007.05.002","","","2","0.20","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1","0","0","0","1","0","0","0"
""Didy," a clinical case of cognitive dysfunction syndrome (vol 2, pg 68, 2007)","Heiblum, A.; Labastida, R.; Gris, Chavez G.; Tejeda, A.; Edwards, Claudia","","","","JOURNAL OF VETERINARY BEHAVIOR-CLINICAL APPLICATIONS AND RESEARCH","SEP-OCT 2007","2007","2","5","","","","183","183","","","","","0","0.00","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"
I manage to import the it using fread, however, I still want to know which is the appropriate quote and why is assigning "Didy," as row names despite that the argument is NULL. This are the arguments that I'm using.
s_file <- read.csv(savedrecs.txt,
skip = 4,
header = TRUE,
row.names = NULL,
quote = '\"',
stringsAsFactors = FALSE)
What you have shown is not a valid csv file format. There are some double double quotes (i.e. "") without a comma. For example there is one at the beginning of the second line.
""Didy," a clinical case of cognitive dysfunction syndrome", etc.
So it thinks there is a null followed by Diddy, followed by " a clinical case of cognitive dysfunction syndrome" Fix up the file and you should be ok. E.g. the second line should start with
"","Didy","a clinical case of cognitive dysfunction syndrome"

Resources