NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP...

23

Transcript of NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP...

Page 1: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP processing from R

Wouter van Atteveldt

CCS Hannover, Feb 2018

NLP processing from R Wouter van Atteveldt

Page 2: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Programme

Tuesday:

� AM: Intro, Text analysis with R

� PM: Topic Modeling: application and validation

Wednesday:

� AM: Technical Details

� PM: Structural Topic Modeling

Thursday:

� AM: Linguistic processing

NLP processing from R Wouter van Atteveldt

Page 3: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Short AmCAT demo

� https://amcat.nl,https://github.com/amcat/amcat

� Server-based corpus management tool

� Project management� Permissions (inc. copyright-sensitive)� Keyword analysis� Quantitative coding� API and connects to R, python, nlpipe� Open source, docker container available

NLP processing from R Wouter van Atteveldt

Page 4: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

AmCAT bene�ts

� Easier overview and sharing of corpora

� Query texts without full text access

� Standardize multi-lingual processing via NLPipe

� Shared starting point for R/Python analyses

� (hit underlying elastic/postgres if you want)

NLP processing from R Wouter van Atteveldt

Page 5: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

AmCAT and R

� Install AmCAT-r:

� install.packages("devtools")

� devtools::install_github("amcat/amcat-r")

� Connecting to AmCAT:

� library(amcat)

� amcat.save.password(...)

� conn = amcat.connect(...)

� Querying AmCAT:

� amcat.aggregate(conn, sets=.., ...)

� amcat.hits(conn, sets=.., ...)

amcat.hits(conn, project=.., sets=.., col=c("headline","text"))

� amcat.getarticlemeta(conn, set=.., ...)

NLP processing from R Wouter van Atteveldt

Page 6: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Why linguistic processing

� Stemming sucks (sorry)

� Not too badly for English

� Computational Linguistics built some great tools

� to extract basic structure of text� to help �lter out uninteresting features� to help enrich words

� We can use these to improve our analyses

NLP processing from R Wouter van Atteveldt

Page 7: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Steps in linguistic processing

� (cleaning UTF, HTML etc)

� Tokenization

� POS tagging

� Lemmatization

� Entity Recognition

� Dependency parsing

� Coreference resolution

NLP processing from R Wouter van Atteveldt

Page 8: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

POS tagging

Identify Part-of-speech (POS) of words:

� noun

� name

� verb

� pronoun

� etc.

Great for focussing on certain classes, �ltering out functionwords

NLP processing from R Wouter van Atteveldt

Page 9: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Lemmatization

Reduce word to lemma�ew -> �y went -> goLike stemming, but betterTM

NLP processing from R Wouter van Atteveldt

Page 10: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Entity recognition

Recognize named entities

� Person

� Organization

� Location

� etc.

Great for building e.g. actor networks, exploring data

NLP processing from R Wouter van Atteveldt

Page 11: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Dependency Parsing� Grammatical structure of sentences

Van Atteveldt et al. (2018) Clause Analysis, Political Analysis

NLP processing from R Wouter van Atteveldt

Page 12: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP Preprocessing

Coreference Resolution

� (aka anaphora resolution)

� What do 'he', 'she', 'the president' etc refer to?

� Very important in text-level analyses

NLP processing from R Wouter van Atteveldt

Page 13: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

Running NLP in R

� Is complicated (sorry)

� Di�erent NLP groups publish di�erent programs

� Attempts are made to unify them (spacy, coreNLP)

� And R packages exists (coreNLP, spacyr)

� But it can be non-trivial to install

NLP processing from R Wouter van Atteveldt

Page 14: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

Running NLP in R

� Is complicated (sorry)

� Di�erent NLP groups publish di�erent programs

� Attempts are made to unify them (spacy, coreNLP)

� And R packages exists (coreNLP, spacyr)

� But it can be non-trivial to install

NLP processing from R Wouter van Atteveldt

Page 15: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

Running NLP in R: your options

� Spacy + spacyr

� coreNLP

� for Dutch: frog + frogr

� nlpiper

NLP processing from R Wouter van Atteveldt

Page 16: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

Spacy + spacyr

� POS, Lemmatization, parsing for 7 languages

� Install: (https://spacy.io/usage/)

1 Windows: install python (e.g. anaconda)2 Windows: install VS express; Mac: install xcode3 Using python/pip or conda, install spacy package4 Using python, download language model

� Run:

library(spacyr)

spacy_initialize("de", executable="/path/to/python")

tokens = spacy_parse('ich bin ein Berliner')

NLP processing from R Wouter van Atteveldt

Page 17: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

coreNLP

library(coreNLP)

downloadCoreNLP()

initCoreNLP(type='english')

output = annotateString("I love Hannover")

getToken(output)

NLP processing from R Wouter van Atteveldt

Page 18: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

frog + frogr

1 Install docker

2 Run frog:

sudo docker run -dp 9887:9887 proycon/lamachine \ frog -S 9887 --skip=pm

1 Install and run frogr:

devtools::install_github("vanatteveldt/frogr")

library(frogr)

tokens = frogr::call_frog("Tulpen uit Amsterdam",

port=9887)

NLP processing from R Wouter van Atteveldt

Page 19: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

NLP in R

nlpipe(r)

library(nlpiper)

id = process_async("corenlp_lemmatize",

"This is a test")

status(id)

tokens = result("corenlp_lemmatize", id,

format='csv'

NLP processing from R Wouter van Atteveldt

Page 20: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

Analysing tokens

Analysing tokens

� Result of NLP processing is tokens dataframe

� One row per word ('token')� Attributes of words in columns (word, lemma, etc)

� You can analyse this using normal dataframe tools

� esp. subset

� Then do actual analysis on �ltered tokens

NLP processing from R Wouter van Atteveldt

Page 21: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

Analysing tokens

Corpustools

� corpustools designed to work with tokens �les

� Remembers word order

� Create a tcorpus object from tokens and possiblemetadata

� Do preprocessing

� Convert to normal dfm/dtm or analyse within corpustools

� Filter dtm on fragments near a word� Windowed associations (semantic networks) and KWIC� Dictionary search with proximity / conditions

NLP processing from R Wouter van Atteveldt

Page 22: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

Analysing tokens

Corpustools

devtools::install_github("kasperwelbers/corpustools")

tc = tokens_to_tcorpus(tokens)

dfm = tc$dtm('lemma', form="quanteda_dfm")

See corpustools handout

NLP processing from R Wouter van Atteveldt

Page 23: NLP processing from R - AmCATi.amcat.nl/lda/5_nlp.pdf · NLP ropcessing NLP in R Corpustools NLP Preprocessing AmCAT bene ts Easier overview and sharing of corpora Query texts without

NLP processing NLP in R Corpustools

Analysing tokens

Conclusion

� R has a lot of tools for text analysis

� quanteda, topicmodels, stm, corpustools

� Important take home lessons

� Think about what you want to measure� 90% of your time is spent gathering and cleaning thedata

� Try out multiple tools as appropriate� Validate on the right metric

� From here:

� Go have fun with these tools!� "R for Data Science" (O'Reilly)� Check out supervised machine learning, e.g. `e1071`package (SVM)

NLP processing from R Wouter van Atteveldt