<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Text Processing Primer
Step1:  <br>
We can find unique words using set().
Step2:  Processing free-text
Step3:  <br>
Finding hastags
Step4:  <br>
Finding callouts
Step5:  Problem
Finds also single '@'.
Solution
Regular expressions for more complex parsing. 
For example '@[A-Za-z0-9_]+' will return all words that
<ASSISTANT_TASK:>
Python Code:
text1 = "Julia is a high-level high-performance dynamic programming language for numerical computing and Julia is used ..."
len(text1)
text2 = text1.split(' ')
text2
len(text2)
[w for w in text2 if len(w) > 3] # Words that are greater than 3 letters long in text2
[w for w in text2 if w.istitle()] # Capitalized words in text2
[w for w in text2 if w.endswith('l')] # Words in text2 that end in 'l'
Explanation: Text Processing Primer
End of explanation
len(set(text2))
set(text2)
set([w.lower() for w in text2])
Explanation: <br>
We can find unique words using set().
End of explanation
text3 = 'Demystifying Dynamic Programming @freecamp @bostongroup @ NY #algorithms'
text4 = text3.split(' ')
text4
Explanation: Processing free-text
End of explanation
[w for w in text4 if w.startswith('#')]
Explanation: <br>
Finding hastags:
End of explanation
[w for w in text4 if w.startswith('@')]
Explanation: <br>
Finding callouts:
End of explanation
import re # for regular expressions
[w for w in text4 if re.search('@[A-Za-z0-9_]+', w)]
Explanation: Problem
Finds also single '@'.
Solution
Regular expressions for more complex parsing. 
For example '@[A-Za-z0-9_]+' will return all words that: 
* start with '@' and are followed by at least one: 
* capital letter ('A-Z')
* lowercase letter ('a-z') 
* number ('0-9')
* or underscore ('_')
End of explanation
<END_TASK>