From 7fe8c9c7dfb94216d923ac597ae46e7a705dafe6 Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Wed, 22 Feb 2017 14:54:25 -0500 Subject: [PATCH 1/7] First draft of text mining --- textmining.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 textmining.py diff --git a/textmining.py b/textmining.py new file mode 100644 index 0000000..a0b6172 --- /dev/null +++ b/textmining.py @@ -0,0 +1,100 @@ +import wikipedia +import string + +def read_presidents_texts(): + presidents = ['George Washington', 'John Adams', 'Thomas Jefferson', + 'James Madison', 'James Monroe', 'John Quincy Adams', 'Andrew Jackson', + 'Martin Van Buren', 'William Henry Harrison', 'John Tyler', + 'James K. Polk', 'Zachary Taylor', 'Millard Fillmore', 'Franklin Pierce', + 'James Buchanan', 'Abraham Lincoln', 'Andrew Johnson', 'Ulysses S. Grant', + 'Rutherford B. Hayes', 'James A. Garfield', 'Chester Arthur', + 'Grover Cleveland', 'Benjamin Harrison', 'William McKinley', + 'Theodore Roosevelt', 'William Howard Taft', 'Woodrow Wilson', + 'Warren G. Harding', 'Calvin Coolidge', 'Herbert Hoover', + 'Franklin D. Roosevelt', 'Harry S. Truman', 'Dwight D. Eisenhower', + 'John F. Kennedy', 'Lyndon B. Johnson', 'Richard Nixon', 'Gerald Ford', + 'Jimmy Carter', 'Ronald Reagan', 'George H. W. Bush', 'Bill Clinton', + 'George W. Bush', 'Barack Obama', 'Donald Trump' + ] + for name in presidents: + with open(name + '.txt', 'r') as f: + words = make_words(f.readlines()) + formatted_words = format_words(words) + frequencies = word_frequency(formatted_words) + print(name) + print(frequencies) + + +def make_words(president_file_lines): + """ This function takes each President file and splits the lines into words + >>> make_words(['What do you mean?']) + ['What', 'do', 'you', 'mean?'] + """ + split_words = [] + for string in president_file_lines: + split = string.split() + split_words.extend(split) + return split_words + + +def exclude(letter): + return letter in string.punctuation or letter in string.whitespace + + +def format_word(word): + """This function will strip all of the words of punctuation and whitespaces + then make the words lowercase + >>> format_word('DOG') + 'dog' + >>> format_word('!!!') + '' + """ + return ''.join(letter for letter in word if not exclude(letter)).lower() + + +def format_words(words): + formatted_words = [] + for word in words: + better_word = format_word(word) + formatted_words.append(better_word) + return formatted_words + + +def word_frequency(formatted_words): + """This function will take all words from the Wikipedia pages and return + the most frequent from each page, with certain exclusions. + """ + # 'John', 'Taft', 'Bush' + d = {} + for word in formatted_words: + with open('bad_words.txt', 'r') as f: + for line in f: + if word in line: + continue + elif len(word) < 5: + continue + else: + count = d.get(word, 0) + 1 + d[word] = count + maximum_frequency = max(d.values()) + word_frequencies = lookup(d, maximum_frequency) + return word_frequencies + + +def lookup(d, v): + """This function should take a value and search for its corresponding key in + the dictionary. + >>> d = {'dog' : 5} + >>> lookup(d, 5) + 'dog' + """ + for k in d: + if d[k] == v: + return k + raise ValueError + + +if __name__ == '__main__': + import doctest + doctest.testmod() + read_presidents_texts() From 8cb46798de71e282c99a2317fc045fe6c91d885b Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Wed, 22 Feb 2017 15:23:20 -0500 Subject: [PATCH 2/7] Turning in draft 2 of text mining --- textmining.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/textmining.py b/textmining.py index a0b6172..c674c94 100644 --- a/textmining.py +++ b/textmining.py @@ -26,7 +26,7 @@ def read_presidents_texts(): def make_words(president_file_lines): - """ This function takes each President file and splits the lines into words + """ This function takes each President file and splits the lines into words. >>> make_words(['What do you mean?']) ['What', 'do', 'you', 'mean?'] """ @@ -38,12 +38,19 @@ def make_words(president_file_lines): def exclude(letter): + """This function should exclude characters that are punctuation or + whitespace. + >>> exclude(' ') + True + >>> exclude('#') + True + """ return letter in string.punctuation or letter in string.whitespace def format_word(word): """This function will strip all of the words of punctuation and whitespaces - then make the words lowercase + then make the words lowercase. >>> format_word('DOG') 'dog' >>> format_word('!!!') @@ -53,6 +60,11 @@ def format_word(word): def format_words(words): + """This function should run all of the words from the Wikipedia pages through + format_word function and return a list of the formatted words. + >>> format_words(['D!oG', 'what', 'CELLAR']) + ['dog', 'what', 'cellar'] + """ formatted_words = [] for word in words: better_word = format_word(word) @@ -63,8 +75,11 @@ def format_words(words): def word_frequency(formatted_words): """This function will take all words from the Wikipedia pages and return the most frequent from each page, with certain exclusions. + >>> word_frequency(['dogs', 'cat', 'the', 'fires', 'fires']) + 'fires' + >>> word_frequency(['tetris', 'tetris', 'and', 'but']) + 'tetris' """ - # 'John', 'Taft', 'Bush' d = {} for word in formatted_words: with open('bad_words.txt', 'r') as f: From 1f5952d2e66efd9224aa73d8a90b4d38ff06ec2f Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Wed, 22 Feb 2017 19:46:59 -0500 Subject: [PATCH 3/7] Table and writeup for Text Mining Project --- .gitignore | 2 ++ project_writeup.md | 20 ++++++++++++++++++++ table.jpeg | Bin 0 -> 82111 bytes 3 files changed, 22 insertions(+) create mode 100644 project_writeup.md create mode 100644 table.jpeg diff --git a/.gitignore b/.gitignore index cbc2b23..1110be6 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,5 @@ ENV/ .ropeproject # End of https://www.gitignore.io/api/python + +*.txt diff --git a/project_writeup.md b/project_writeup.md new file mode 100644 index 0000000..5c5f2e0 --- /dev/null +++ b/project_writeup.md @@ -0,0 +1,20 @@ +Kerry McConnaughay +Project 3 Writeup and Reflection + + I used Wikipedia as my data source and saved every page for each President of the United States. To analyze the word frequency of the pages, I used multiple functions together. I wanted to determine what the most frequent word is on each page so that I could try to apply that word to trends from the corresponding President’s time period. I was interested in learning if there is a correlation between major issues of the time and the most frequent word in the article. + + In choosing how to implement my system, I had to have multiple basic functions that were necessary for my system to actually analyze word frequency. Additionally, I had to be able to change the lines of strings I got from the Wikipedia articles into words and then format those words to exclude punctuation and whitespace. In order to avoid searching Wikipedia multiple times for every page I needed, I searched the page once in a separate file and converted the online articles to local text files. These text files were used by my main file to actually get the words I needed. There is one file that searches Wikipedia for specified pages, which are converted to text and then run through a number of functions. + + When I started running the code, I realized that the code would return frequent words such as “the” or “and” from the articles. Because such words have little implicit or explicit meaning, I had to choose from different options which allowed me to exclude the words. I thought about making separate lists of conjunctions, helping verbs, pronouns, and other similar short words that are unimportant, but decided against multiple lists because it is a large amount of work and increases the likelihood of mistakes in the bodies of the functions. Initially, I had one list of “bad words” that the function used, but every time I ran the program, there were more returned and undesired “bad words.” This was also inefficient, so I edited the program and created a separate text file of the unwanted words that the function would read through. The words in the file were skipped and not added to the dictionary. I modified the list of the presidents’ names that I used to search Wikipedia and made sure the word counter did not use the presidents’ names as the most frequent. Additionally, I chose to include a parameter that excludes a word from the dictionary based on word length; words shorter than five characters are typically not very interesting. There are exclusions to that condition, of course, but I chose to sacrifice some words. The final choice was better than the other routes I could have taken because it made the code neater and offered an easier way to add words to the list of “bad words.” + + One other important consideration was whether I would read the entire content of each Wikipedia page or just the summary of each of the Presidents’ profiles. To analyze more data, I chose the entire Wikipedia page, even though there are some sections that are not only about a President’s life or history. + + After doing some text analysis, I saw that the most frequent words often correlated with the issue or topic each President is most well-known for. For example, “constitution” is the most frequent word on the Wikipedia page for James Madison and he is known as the “Father of the Constitution” because he helped draft and promote the United State Constitution and the Bill of Rights. I thought it was interesting that the Wikipedia articles reflected the key events and topics people usually associate with every president. Repetition of those words reinforces individuals’ automatic reflex that matches George Washington to his role in fighting the British for American freedom. Such associations are helpful in memorizing a vague timeline of the presidents and their contributions to American history. The table below reflects some of the most interesting words and their relation to certain political topics and events. + It is also interesting that some of the words do not match up with the actual actions of the president. Jimmy Carter for example, had a very rich political history in Georgia before he became President of the United States. Although individuals may not see this as his most important contribution, that part of his history certainly influenced him and gave him the experience necessary to be a president. + +![table] +(table.jpeg) + + Looking at the overall process of the project, I am happy with the progress I made. After reading the initial notes on the Mini Project, I was a little lost, so I took notes on a paper and I wrote down some ideas before going to my terminal. Once I decided on Wikipedia and Presidents, I started thinking of how I would be able to analyze the text using word frequency. Writing down the basic steps needed for such a program out on paper is very helpful overall. I think it eliminated time I would have otherwise been wasting writing bad code. Another part that went well was my ability to totally understand everything I needed to write for the program to work the way I wanted it to. Storing text as separate files and reading those files, I expanded my abilities to pull data from other sources. Although I have had difficulties writing code that has clear doctests and explanations for what the functions should be doing, I was able to write the tests and comments myself. One thing that could be improved on is the time spent on the project. Had I started the project a little earlier, I would have been able to explore more and possibly have a deeper understanding of analytic and processing techniques. It would have also been better if I could have done some more challenging analysis of the texts as well. For example, I considered choosing to return multiple words that show up frequently and sorting them into categories, but I was unable to do this. The scope of this project was appropriate for me; I struggled with writing some of the code, but in the end, the program was successful after I spent enough time debugging and doing some outside research. Going forward, I will continue to increase my use of unit testing, which is very useful, and plan out the code I need on paper before starting to write it in atom. + + diff --git a/table.jpeg b/table.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..447f55efa163cf7876a36fc3331a8193f03d58a3 GIT binary patch literal 82111 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

5{WDy}$G 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 literal 0 HcmV?d00001 From 869e4dca031046be7a8640017c0c8250a37fd66f Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Wed, 22 Feb 2017 19:50:46 -0500 Subject: [PATCH 4/7] Newly formatted project writeup --- project_writeup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/project_writeup.md b/project_writeup.md index 5c5f2e0..5861565 100644 --- a/project_writeup.md +++ b/project_writeup.md @@ -1,4 +1,5 @@ Kerry McConnaughay + Project 3 Writeup and Reflection I used Wikipedia as my data source and saved every page for each President of the United States. To analyze the word frequency of the pages, I used multiple functions together. I wanted to determine what the most frequent word is on each page so that I could try to apply that word to trends from the corresponding President’s time period. I was interested in learning if there is a correlation between major issues of the time and the most frequent word in the article. From 7055f874fa3f2745d484335c8d777b4e4360ee7f Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Wed, 22 Feb 2017 19:58:38 -0500 Subject: [PATCH 5/7] More newly formatted project writeup --- project_writeup.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/project_writeup.md b/project_writeup.md index 5861565..a50ba2b 100644 --- a/project_writeup.md +++ b/project_writeup.md @@ -2,20 +2,21 @@ Kerry McConnaughay Project 3 Writeup and Reflection - I used Wikipedia as my data source and saved every page for each President of the United States. To analyze the word frequency of the pages, I used multiple functions together. I wanted to determine what the most frequent word is on each page so that I could try to apply that word to trends from the corresponding President’s time period. I was interested in learning if there is a correlation between major issues of the time and the most frequent word in the article. +I used Wikipedia as my data source and saved every page for each President of the United States. To analyze the word frequency of the pages, I used multiple functions together. I wanted to determine what the most frequent word is on each page so that I could try to apply that word to trends from the corresponding President’s time period. I was interested in learning if there is a correlation between major issues of the time and the most frequent word in the article. - In choosing how to implement my system, I had to have multiple basic functions that were necessary for my system to actually analyze word frequency. Additionally, I had to be able to change the lines of strings I got from the Wikipedia articles into words and then format those words to exclude punctuation and whitespace. In order to avoid searching Wikipedia multiple times for every page I needed, I searched the page once in a separate file and converted the online articles to local text files. These text files were used by my main file to actually get the words I needed. There is one file that searches Wikipedia for specified pages, which are converted to text and then run through a number of functions. +In choosing how to implement my system, I had to have multiple basic functions that were necessary for my system to actually analyze word frequency. Additionally, I had to be able to change the lines of strings I got from the Wikipedia articles into words and then format those words to exclude punctuation and whitespace. In order to avoid searching Wikipedia multiple times for every page I needed, I searched the page once in a separate file and converted the online articles to local text files. These text files were used by my main file to actually get the words I needed. There is one file that searches Wikipedia for specified pages, which are converted to text and then run through a number of functions. - When I started running the code, I realized that the code would return frequent words such as “the” or “and” from the articles. Because such words have little implicit or explicit meaning, I had to choose from different options which allowed me to exclude the words. I thought about making separate lists of conjunctions, helping verbs, pronouns, and other similar short words that are unimportant, but decided against multiple lists because it is a large amount of work and increases the likelihood of mistakes in the bodies of the functions. Initially, I had one list of “bad words” that the function used, but every time I ran the program, there were more returned and undesired “bad words.” This was also inefficient, so I edited the program and created a separate text file of the unwanted words that the function would read through. The words in the file were skipped and not added to the dictionary. I modified the list of the presidents’ names that I used to search Wikipedia and made sure the word counter did not use the presidents’ names as the most frequent. Additionally, I chose to include a parameter that excludes a word from the dictionary based on word length; words shorter than five characters are typically not very interesting. There are exclusions to that condition, of course, but I chose to sacrifice some words. The final choice was better than the other routes I could have taken because it made the code neater and offered an easier way to add words to the list of “bad words.” +When I started running the code, I realized that the code would return frequent words such as “the” or “and” from the articles. Because such words have little implicit or explicit meaning, I had to choose from different options which allowed me to exclude the words. I thought about making separate lists of conjunctions, helping verbs, pronouns, and other similar short words that are unimportant, but decided against multiple lists because it is a large amount of work and increases the likelihood of mistakes in the bodies of the functions. Initially, I had one list of “bad words” that the function used, but every time I ran the program, there were more returned and undesired “bad words.” This was also inefficient, so I edited the program and created a separate text file of the unwanted words that the function would read through. The words in the file were skipped and not added to the dictionary. I modified the list of the presidents’ names that I used to search Wikipedia and made sure the word counter did not use the presidents’ names as the most frequent. Additionally, I chose to include a parameter that excludes a word from the dictionary based on word length; words shorter than five characters are typically not very interesting. There are exclusions to that condition, of course, but I chose to sacrifice some words. The final choice was better than the other routes I could have taken because it made the code neater and offered an easier way to add words to the list of “bad words.” - One other important consideration was whether I would read the entire content of each Wikipedia page or just the summary of each of the Presidents’ profiles. To analyze more data, I chose the entire Wikipedia page, even though there are some sections that are not only about a President’s life or history. +One other important consideration was whether I would read the entire content of each Wikipedia page or just the summary of each of the Presidents’ profiles. To analyze more data, I chose the entire Wikipedia page, even though there are some sections that are not only about a President’s life or history. - After doing some text analysis, I saw that the most frequent words often correlated with the issue or topic each President is most well-known for. For example, “constitution” is the most frequent word on the Wikipedia page for James Madison and he is known as the “Father of the Constitution” because he helped draft and promote the United State Constitution and the Bill of Rights. I thought it was interesting that the Wikipedia articles reflected the key events and topics people usually associate with every president. Repetition of those words reinforces individuals’ automatic reflex that matches George Washington to his role in fighting the British for American freedom. Such associations are helpful in memorizing a vague timeline of the presidents and their contributions to American history. The table below reflects some of the most interesting words and their relation to certain political topics and events. - It is also interesting that some of the words do not match up with the actual actions of the president. Jimmy Carter for example, had a very rich political history in Georgia before he became President of the United States. Although individuals may not see this as his most important contribution, that part of his history certainly influenced him and gave him the experience necessary to be a president. +After doing some text analysis, I saw that the most frequent words often correlated with the issue or topic each President is most well-known for. For example, “constitution” is the most frequent word on the Wikipedia page for James Madison and he is known as the “Father of the Constitution” because he helped draft and promote the United State Constitution and the Bill of Rights. I thought it was interesting that the Wikipedia articles reflected the key events and topics people usually associate with every president. Repetition of those words reinforces individuals’ automatic reflex that matches George Washington to his role in fighting the British for American freedom. Such associations are helpful in memorizing a vague timeline of the presidents and their contributions to American history. The table below reflects some of the most interesting words and their relation to certain political topics and events. + +It is also interesting that some of the words do not match up with the actual actions of the president. Jimmy Carter for example, had a very rich political history in Georgia before he became President of the United States. Although individuals may not see this as his most important contribution, that part of his history certainly influenced him and gave him the experience necessary to be a president. ![table] (table.jpeg) - Looking at the overall process of the project, I am happy with the progress I made. After reading the initial notes on the Mini Project, I was a little lost, so I took notes on a paper and I wrote down some ideas before going to my terminal. Once I decided on Wikipedia and Presidents, I started thinking of how I would be able to analyze the text using word frequency. Writing down the basic steps needed for such a program out on paper is very helpful overall. I think it eliminated time I would have otherwise been wasting writing bad code. Another part that went well was my ability to totally understand everything I needed to write for the program to work the way I wanted it to. Storing text as separate files and reading those files, I expanded my abilities to pull data from other sources. Although I have had difficulties writing code that has clear doctests and explanations for what the functions should be doing, I was able to write the tests and comments myself. One thing that could be improved on is the time spent on the project. Had I started the project a little earlier, I would have been able to explore more and possibly have a deeper understanding of analytic and processing techniques. It would have also been better if I could have done some more challenging analysis of the texts as well. For example, I considered choosing to return multiple words that show up frequently and sorting them into categories, but I was unable to do this. The scope of this project was appropriate for me; I struggled with writing some of the code, but in the end, the program was successful after I spent enough time debugging and doing some outside research. Going forward, I will continue to increase my use of unit testing, which is very useful, and plan out the code I need on paper before starting to write it in atom. +Looking at the overall process of the project, I am happy with the progress I made. After reading the initial notes on the Mini Project, I was a little lost, so I took notes on a paper and I wrote down some ideas before going to my terminal. Once I decided on Wikipedia and Presidents, I started thinking of how I would be able to analyze the text using word frequency. Writing down the basic steps needed for such a program out on paper is very helpful overall. I think it eliminated time I would have otherwise been wasting writing bad code. Another part that went well was my ability to totally understand everything I needed to write for the program to work the way I wanted it to. Storing text as separate files and reading those files, I expanded my abilities to pull data from other sources. Although I have had difficulties writing code that has clear doctests and explanations for what the functions should be doing, I was able to write the tests and comments myself. One thing that could be improved on is the time spent on the project. Had I started the project a little earlier, I would have been able to explore more and possibly have a deeper understanding of analytic and processing techniques. It would have also been better if I could have done some more challenging analysis of the texts as well. For example, I considered choosing to return multiple words that show up frequently and sorting them into categories, but I was unable to do this. The scope of this project was appropriate for me; I struggled with writing some of the code, but in the end, the program was successful after I spent enough time debugging and doing some outside research. Going forward, I will continue to increase my use of unit testing, which is very useful, and plan out the code I need on paper before starting to write it in atom. From 2b6a09d97bd9986dcfb18a195c71ba465b16c14d Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Wed, 22 Feb 2017 20:00:27 -0500 Subject: [PATCH 6/7] Associated files with text mining project --- bad_words.py | 31 +++++++++++++++++++++++++++++++ pages.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 bad_words.py create mode 100644 pages.py diff --git a/bad_words.py b/bad_words.py new file mode 100644 index 0000000..9fd0a48 --- /dev/null +++ b/bad_words.py @@ -0,0 +1,31 @@ + +def bad_words(): + list_bad_words = ['george', 'washington', 'adams', 'thomas', 'washingtons' + 'jefferson', 'madison', 'james', 'monroe', 'quincy', 'jacksons', + 'adams', 'andrew', 'jackson','martin', 'buren', 'tylers', + 'henry', 'harrison', 'tyler', 'polk', 'zachary', 'polks', 'taylors', + 'taylor', 'millard', 'fillmore', 'pierce', 'fillmores', 'pierces', + 'buchanan', 'abraham', 'lincoln', 'andrew', 'johnson', 'ulysses', + 'grant','rutherford', 'hayes', 'garfield', 'chester', 'johnsons', + 'arthur','grover', 'cleveland', 'benjamin', 'harrison', 'william', + 'mckinley','theodore', 'roosevelt','howard', 'grants', 'hayess', + 'woodrow', 'wilson','warren', 'harding', 'calvin', 'coolidge', + 'herbert', 'hoover','franklin', 'harry', 'truman','dwight','arthurs' + 'eisenhower', 'kennedy', 'Lyndon', 'Johnson', 'richard', 'nixon', + 'gerald', 'ford','jimmy', 'carter', 'ronald', 'reagan', 'clevelands', + 'bill', 'clinton', 'barack', 'obama', 'donald', 'trump', 'trumps', + 'president', 'william', 'would', 'which', 'years', 'zachary', 'presidential', + 'though', 'while', 'because', 'harrisons', 'mckinleys', 'hardings', + 'eisenhowers', 'kennedys', 'johnsons', 'carters', 'reagans', 'clintons', + 'state', 'states', 'wilsons', 'after', 'trumans', 'roosevelts', 'garfields', + 'coolidges', 'burens', 'lincolns', 'buchanans', 'nixons', 'fords', 'during', + 'their', 'united', 'house', 'later', 'american', 'republican', 'jeffersons' + ] + f = open('bad_words.txt', 'w') + for string in list_bad_words: + f.write(string + ' ' ) + f.close() + + +if __name__ == '__main__': + bad_words() diff --git a/pages.py b/pages.py new file mode 100644 index 0000000..8a11aaf --- /dev/null +++ b/pages.py @@ -0,0 +1,30 @@ +import wikipedia + +def presidents_to_texts(): + presidents = ['George Washington', 'John Adams', 'Thomas Jefferson', + 'James Madison', 'James Monroe', 'John Quincy Adams', 'Andrew Jackson', + 'Martin Van Buren', 'William Henry Harrison', 'John Tyler', + 'James K. Polk', 'Zachary Taylor', 'Millard Fillmore', 'Franklin Pierce', + 'James Buchanan', 'Abraham Lincoln', 'Andrew Johnson', 'Ulysses S. Grant', + 'Rutherford B. Hayes', 'James A. Garfield', 'Chester Arthur', + 'Grover Cleveland', 'Benjamin Harrison', 'William McKinley', + 'Theodore Roosevelt', 'William Howard Taft', 'Woodrow Wilson', + 'Warren G. Harding', 'Calvin Coolidge', 'Herbert Hoover', + 'Franklin D. Roosevelt', 'Harry S. Truman', 'Dwight D. Eisenhower', + 'John F. Kennedy', 'Lyndon B. Johnson', 'Richard Nixon', 'Gerald Ford', + 'Jimmy Carter', 'Ronald Reagan', 'George H. W. Bush', 'Bill Clinton', + 'George W. Bush', 'Barack Obama', 'Donald Trump' + ] + for name in presidents: + page = wikipedia.page(name) + # text = page.summary + text = page.content + with open(name + '.txt', 'w') as f: + f.write(text) + +# def format_filename(president_name): + # return '/tmp/president_data/' + '_'.join(president_name.lower().split(' '))( + # + '.txt') + +if __name__ == '__main__': + presidents_to_texts() From 6211bdd256706b02f7ad12fe93f8065b7eed3695 Mon Sep 17 00:00:00 2001 From: Kerry McConnaughay Date: Sun, 23 Apr 2017 14:00:13 -0400 Subject: [PATCH 7/7] Revised text mining mini project in classes with unittest --- revised_textmining.py | 177 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 revised_textmining.py diff --git a/revised_textmining.py b/revised_textmining.py new file mode 100644 index 0000000..49f12bd --- /dev/null +++ b/revised_textmining.py @@ -0,0 +1,177 @@ +import wikipedia +import string +import unittest + +class Text(): + + def __init__(self): + self.presidents = [ + 'George Washington', + 'John Adams', + 'Thomas Jefferson', + 'James Madison', + 'James Monroe', + 'John Quincy Adams', + 'Andrew Jackson', + 'Martin Van Buren', + 'William Henry Harrison', + 'John Tyler', + 'James K. Polk', + 'Zachary Taylor', + 'Millard Fillmore', + 'Franklin Pierce', + 'James Buchanan', + 'Abraham Lincoln', + 'Andrew Johnson', + 'Ulysses S. Grant', + 'Rutherford B. Hayes', + 'James A. Garfield', + 'Chester Arthur', + 'Grover Cleveland', + 'Benjamin Harrison', + 'William McKinley', + 'Theodore Roosevelt', + 'William Howard Taft', + 'Woodrow Wilson', + 'Warren G. Harding', + 'Calvin Coolidge', + 'Herbert Hoover', + 'Franklin D. Roosevelt', + 'Harry S. Truman', + 'Dwight D. Eisenhower', + 'John F. Kennedy', + 'Lyndon B. Johnson', + 'Richard Nixon', + 'Gerald Ford', + 'Jimmy Carter', + 'Ronald Reagan', + 'George H. W. Bush', + 'Bill Clinton', + 'George W. Bush', + 'Barack Obama', + 'Donald Trump'] + + self.blacklist = ['george', 'washington', 'adams', 'thomas', 'washingtons', + 'jefferson', 'madison', 'james', 'monroe', 'quincy', 'jacksons', + 'adams', 'andrew', 'jackson','martin', 'buren', 'tylers', + 'henry', 'harrison', 'tyler', 'polk', 'zachary', 'polks', 'taylors', + 'taylor', 'millard', 'fillmore', 'pierce', 'fillmores', 'pierces', + 'buchanan', 'abraham', 'lincoln', 'andrew', 'johnson', 'ulysses', + 'grant','rutherford', 'hayes', 'garfield', 'chester', 'johnsons', + 'arthur','grover', 'cleveland', 'benjamin', 'harrison', 'william', + 'mckinley','theodore', 'roosevelt','howard', 'grants', 'hayess', + 'woodrow', 'wilson','warren', 'harding', 'calvin', 'coolidge', + 'herbert', 'hoover','franklin', 'harry', 'truman','dwight','arthurs' + 'eisenhower', 'kennedy', 'Lyndon', 'Johnson', 'richard', 'nixon', + 'gerald', 'ford','jimmy', 'carter', 'ronald', 'reagan', 'clevelands', + 'bill', 'clinton', 'barack', 'obama', 'donald', 'trump', 'trumps', + 'president', 'william', 'would', 'which', 'years', 'zachary', 'presidential', + 'though', 'while', 'because', 'harrisons', 'mckinleys', 'hardings', + 'eisenhowers', 'kennedys', 'johnsons', 'carters', 'reagans', 'clintons', + 'state', 'states', 'wilsons', 'after', 'trumans', 'roosevelts', 'garfields', + 'coolidges', 'burens', 'lincolns', 'buchanans', 'nixons', 'fords', 'during', + 'their', 'united', 'house', 'later', 'american', 'republican', 'jeffersons' + ] + + def load_file(self, filename): + """ Opens each file and saves the text in a list. """ + + # Open the file and store it as text + with open(filename, 'r') as f: + text = [line for line in f] + + return text + + def to_words(self, text): + """ Takes a President text and splits into individual words. """ + split_words = [] + + for line in text: + split = line.split() + split_words.extend(split) + + return split_words + + def remove_punctuation_and_whitespace(self, word): + """ Excludes characters classified as punctuation and whitespace. """ + letters = [ + letter.lower() for letter in word + if letter not in string.punctuation + and letter not in string.whitespace] + + return ''.join(letters) # Join list of letters into a string + + def most_frequent(self, words, blacklist): + """This function will take all words from the Wikipedia pages and return + the most frequent from each page, with certain exclusions. """ + + counts = {} + for word in words: + long_enough = len(word) >= 5 + whitelisted = word not in blacklist + + if long_enough and whitelisted: + counts[word] = counts.get(word, 0) + 1 + + return max(counts, key=counts.get) + + def main(self): + most_common_words = [] + + for filename in self.presidents: + text = self.load_file(filename + '.txt') + words = self.to_words(text) + stripped = [ + self.remove_punctuation_and_whitespace(word) for word in words] + mode = self.most_frequent(stripped, self.blacklist) + most_common_words.append(mode) + + return most_common_words + +class TestText(unittest.TestCase): + + def setUp(self): + self.subject = Text() + + def test_to_words(self): + # Arrange + lines = ['That makes some sense.', 'What is up?'] + + # Act + result = self.subject.to_words(lines) + + # Assert + expected = ['That', 'makes', 'some', 'sense.', 'What', 'is', 'up?'] + self.assertEqual(result, expected) + + def test_most_frequent(self): + # Arrange + blacklist = ['hello'] + words = [ + 'then', 'then', 'then', + 'hello', 'hello', 'hello', 'hello', + 'fires', 'fires', + 'huzzah'] + + # Act + result = self.subject.most_frequent(words, blacklist) + + # Assert + expected = 'fires' + self.assertEqual(result, expected) + + def test_remove_punctuation_and_whitespace(self): + # Arrange + word = 'W,h!At\'\n ' + # Act + result = self.subject.remove_punctuation_and_whitespace(word) + + # Assert + expected = 'what' + self.assertEqual(result, expected) + + +if __name__ == '__main__': + t = Text() + print(t.main()) + unittest.main()