联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Python编程Python编程

日期:2024-02-25 01:03

Assignment 4


Large-Scale Text Processing


MET CS777


Description


In this assignment you will implement k-nearest neighbor classifier (KNNclassifier) to classify text documents. For example, given a search text “ How many goals did


Vancouver score last year?”, the algorithm searches all the documents corpus (corpus: large and structural text) and returns the top K similar documents.


The TF-IDF (Term Frequency - Inverse Document Frequency) is used as the similarity/distance measure between two document/texts.


In the first step, the top 20k English words of the corpus will be selected, then the TF-IDF matrix of a text corpus get computed, which is used to find similarity between the texts.


Wikipedia dataset


In this assignment, the Wikipedia data set is used. The entire Wikipedia data set has been downloaded from (https://dumps.wikimedia.org) and stored in a large file.


Each Wikipedia Page is a document and have a unique document ID and a


specific URL. For example,


? docID 418348


? URLhttps://en.wikipedia.org/wiki?curid=418348


Data format


Each line is a single document in a pseudo XML format.




Small Data Set - Wikipedia Pages


You can find a small data set (Only 1000 Wikipedia pages) on AWS S3:


s3://metcs777-sp24/data/WikipediaPagesOneDocPerLine1000LinesSmall.txt


Large Data Set


Large data set consists of 1 million pages (2.2 GB) and can be found here:


s3://metcs777-sp24/data/WikipediaPagesOneDocPerLine1m.txt


Categories of the large data of Wikipedia can be found here:


s3://metcs777-sp24/data/wiki-categorylinks.csv.bz2


Templates


Use Assignment4-Template.[ipynb/py] as starting point for your implementation.


Tasks


Task 1 (10 points): Generate a 20K dictionary


Task 1.1 - Using Wikipedia pages, find the top 20,000 English words, save them in an array, and sort them based on the frequency of the occurrence.


Task 1.2 - As a result, adictionary has been generated that contains the top 20K most frequent words in the corpus. Next go over each Wikipedia document and check if the words appear in the Top 20K words. At the end, produce an RDD that includes the docID as key and a Numpy array for the position of each word in the top 20K dictionary.


(docID, [dictionaryPos1,dictionaryPos2,dictionaryPos3...])


Task 2 (20 Points): Create the TF-IDF Array


After having the top 20K words we want to create a large array that its columns are the words of the dictionary with number of occurrences of each word and the rows are documents.


The first step is calculating the “Term Frequency”, TF (x, w), vector for each document as follows:




“Term Frequency” is an indication of the number of times a term occurs in a document. Numerator is number of occurrences of a word, and the denominator is the sum of all    the words of the document.


Next, calculate “Inverse Document Frequency” for all the documents and finally calculate TF-IDF(w) and create TF-IDF matrix of the corpus:




Note that the “size of corpus” is total number of documents (numerator). To learn more about TF-IDF see the Wikipedia page: https://en.wikipedia.org/wiki/Tf-idf


Task 3 - Implement the getPrediction function (30 Points)


Finally, implement the function getPrediction(textInput, k),which will predict the membership of the textInput to the top 20 closest documents, and the list of top categories.


You should use the cosine similarity to calculate the distances.




Task 4 (30 points): Implement the code using Dataframes


Implement the complete code in Dataframe and printout the results of the task 3 using dataframes in pyspark. From the beginning of your code to the end of your kNN implementation you are allowed to usespark dataframe and python (including python libraries like numpy). You are not allowed to use RDDs.


Task 5 (10 points) Removing Stop Words and Do Stemming


Task 5.1 - Remove Stop Words


Describe if removing the English Stop words (most common words like ”a, the, is, are, i, you, ...”) would change the final kNN results.


Does your result change significantly after removing the stop words? Why?


Provide reasons.


You do not need to code this task.


Task 5.2 - Considering English word stemming


We can stem the words [”game”,”gaming”,”gamed”,”games”] to their root word ”game” .


Does stemming change your result significantly? Why? Provide reasons.


You can learn more about stemming at:


https://en.wikipedia.org/wiki/Stemming


You do not need to code this task.


Submission Guidelines


● Naming Convention:


METCS777-Assignment3-[TaskX-Y]FIRST+LASTNAME.[pdf/py/ipynb]


Where:


o [TaskX-Y] doesn’t apply for .[pdf] files


o No space between first and lastname


● Files:


o Create one document in pdf that has screenshots of running results of all coding problems. For each task, copy and paste the results that your lastSpark job saved in the bucket. Also, for each Spark job, include a screenshot of the Spark History. Explain clearly and precisely the results.


o Include output file for each task.


o Please submit each file separately (DO NOT ZIP them!!!).


● For example, sample submission of John Doe’s Assignment 4 should be the following files:


o METCS777-Assignment4-JohnDoe.pdf


o METCS777-Assignment4-Task1-4-JohnDoe.ipynb


o METCS777-Assignment4-Task1-JohnDoe.py


o METCS777-Assignment4-Task1-Output-JohnDoe.txt


o METCS777-Assignment4-Task2-JohnDoe.py


o METCS777-Assignment4-Task2-Output-JohnDoe.txt o …




Figure 1: Screenshot of Spark History



Evaluation Criteria for Coding Tasks



Academic Misconduct Regarding Programming


In a programming class like this, there is sometimes a very fine line between “cheating” and acceptable and beneficial interaction between peers. Thus, it is very important that  you fully understand what is and what is not allowed in terms of collaboration with your classmates. We want to be 100% precise,so that there can be no confusion.


The rule on collaboration and communication with your classmates is as follows: you cannot transmit or receive code from or to anyone in the class in anyway —visually (by  showing someone your code), electronically (by emailing, posting, or otherwise sending someone your code), verbally (by reading code to someone) or in any other way we have not yet imagined. Any other collaboration is acceptable.


It is not allowed to collaborate and communicate with people who are not your classmates (or your TAs or instructor). This means posting any questions of any nature to programming forums such as StackOverflow is strictly prohibited. As far as going to  the web and using Google, we will apply the “two-line rule”. Go to any web page you   like and do any search that you like. But you cannot take more than two lines of code   from an external resource and include it in your assignment in any form. Note that changing variable names or otherwise transforming or obfuscating code you found on  the web does not render the “two-line rule” inapplicable. It is still a violation to obtain more than two lines of code from an external resource and turn it in, whatever you do to those two lines after you first obtain them.


Furthermore, you must always cite your sources. Add a comment to your code that includes the URL(s) that you consulted when constructing your solution. This turns out to be very helpful when you’re looking at something you wrote a while ago and you need to remind yourself what you were thinking.


相关文章

版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp