コード例 #1
0
// collectPercentages searches the output file for the highest
// plagiarism percentages for each student.
func collectPercentages(org string, fileNameAndPath string) bool {
	results := make(map[string]common.PctInfo)
	pos := strings.LastIndex(fileNameAndPath, "/")
	resultsDir := fileNameAndPath[:pos]

	file, err := os.Open(fileNameAndPath)
	if err != nil {
		fmt.Printf("Could not open %s: %v\n", fileNameAndPath, err)
		return false
	}
	defer file.Close()

	reader := bufio.NewReader(file)

	// Get web page data
	doc, err := goquery.NewDocumentFromReader(reader)
	if err != nil {
		fmt.Printf("Error opening document in goquery: %v\n", err)
		return false
	}

	// Find the href attributes
	doc.Find("a").Each(func(k int, a *goquery.Selection) {
		url, _ := a.Attr("href")

		// If there is a link to the match
		if url != "" {
			value := a.Text()
			data := strings.Split(value, ", ")

			for i := range data {
				temp, _ := getInfoFromString(org, data[i])
				temp.Link = url
				idx := temp.Repo

				// Save the percentage and link if the percentage if greater than the previous value.
				if temp.Percent > results[idx].Percent {
					results[idx] = temp
				}
			}
		}
	})

	var orderedResults common.PctInfoSlice
	common.OrderPctInfo(&results, &orderedResults)

	common.MakePercentagePage(resultsDir, &orderedResults)
	common.MakePercentageFile(resultsDir, &orderedResults)

	return true
}
コード例 #2
0
// collectPercentages searches the output file for the highest
// plagiarism percentages for each student.
func collectPercentages(org string, fileNameAndPath string) bool {
	results := make(map[string]common.PctInfo)
	pos := strings.LastIndex(fileNameAndPath, "/")
	resultsDir := fileNameAndPath[:pos]

	file, err := os.Open(fileNameAndPath)
	if err != nil {
		return false
	}
	defer file.Close()

	reader := bufio.NewReader(file)

	// Get web page data
	doc, err := goquery.NewDocumentFromReader(reader)
	if err != nil {
		fmt.Printf("Error opening document in goquery: %v\n", err)
		return false
	}

	doc.Find("h2").Each(func(i int, h2 *goquery.Selection) {
		value := h2.Text()
		pos1 := strings.Index(value, org+"/")
		repo := value[pos1+len(org)+1:]
		pos2 := strings.Index(repo, "/")
		repo = repo[:pos2]
		pct := -1.0
		url := fileNameAndPath

		results[repo] = common.PctInfo{Repo: repo, Percent: pct, Link: url}
	})

	var orderedResults common.PctInfoSlice
	common.OrderPctInfo(&results, &orderedResults)

	common.MakePercentagePage(resultsDir, &orderedResults)
	common.MakePercentageFile(resultsDir, &orderedResults)

	return true
}
コード例 #3
0
// collectPercentages searches the output file for the highest
// plagiarism percentages for each student.
func collectPercentages(org string, fileNameAndPath string) bool {
	results := make(map[string]common.PctInfo)
	pos := strings.LastIndex(fileNameAndPath, "/")
	resultsDir := fileNameAndPath[:pos]

	file, err := os.Open(fileNameAndPath)
	if err != nil {
		fmt.Printf("Could not open %s: %v\n", fileNameAndPath, err)
		return false
	}
	defer file.Close()

	reader := bufio.NewReader(file)

	// Get web page data
	doc, err := goquery.NewDocumentFromReader(reader)
	if err != nil {
		fmt.Printf("Error opening document in goquery: %v\n", err)
		return false
	}

	// Find the last table
	table := doc.Find("table").Last()

	// Find the table rows
	table.Find("tr").Each(func(i int, tr *goquery.Selection) {
		repo1 := ""

		// Find the table columns
		tr.Find("td").Each(func(j int, td *goquery.Selection) {
			url := ""
			value := td.Text()

			// Find the href attributes
			td.Find("a").Each(func(k int, a *goquery.Selection) {
				url, _ = a.Attr("href")
			})

			// If there is a link to the match
			if url != "" {
				tmpValue := strings.TrimSuffix(value, "%)")
				parts := strings.Split(tmpValue, "(")

				// Get the second student's repo name
				repo2 := parts[0]

				// Get the percentage
				pct, err := strconv.ParseFloat(parts[1], 64)
				if err != nil {
					fmt.Printf("Error parsing %s: %s\n", parts[1], err)
				}

				// Save the percentage and link if the percentage if greater than the previous value.
				if pct > results[repo1].Percent {
					results[repo1] = common.PctInfo{Repo: repo1, Percent: pct, Link: url}
				}
				if pct > results[repo2].Percent {
					results[repo2] = common.PctInfo{Repo: repo2, Percent: pct, Link: url}
				}

			} else if value != "->" {
				// Get the first student's repo name
				repo1 = value
			}
		})
	})

	var orderedResults common.PctInfoSlice
	common.OrderPctInfo(&results, &orderedResults)

	common.MakePercentagePage(resultsDir, &orderedResults)
	common.MakePercentageFile(resultsDir, &orderedResults)

	return true
}