Amazon Keyword Frequency Tool

Analyze keyword frequency, select high-frequency words, and generate "+" prefixed content

当前为 2025-01-17 提交的版本,查看 最新版本

// ==UserScript==
// @name         Amazon Keyword Frequency Tool
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  Analyze keyword frequency, select high-frequency words, and generate "+" prefixed content
// @author       Your Name
// @match        https://www.amazon.com/*
// @grant        GM_setClipboard
// ==/UserScript==

(function () {
    'use strict';

    const excludedWords = [
        "and", "or", "not", "but", "nor", "so", "yet", "for", "in", "on", "at", "by", "to",
        "of", "with", "about", "as", "from", "into", "over", "under", "after", "before",
        "around", "through", "between", "sets", "set", "pack", "pcs", "dozen", "pair", "unit",
        "kg", "g", "lb", "oz", "cm", "mm", "m", "km", "in", "ft", "ml", "l", "box", "bottle",
        "jar", "can", "tray"
    ];

    const excludedSymbols = /^[!@#$%^&*(),.?":{}|<>+=/\\~`;'\[\]-]+$/;

    // Create a floating button
    const button = document.createElement("div");
    button.textContent = "+";
    button.style.position = "fixed";
    button.style.bottom = "20px";
    button.style.left = "20px";
    button.style.width = "50px";
    button.style.height = "50px";
    button.style.borderRadius = "50%";
    button.style.backgroundColor = "#007bff";
    button.style.color = "white";
    button.style.fontSize = "24px";
    button.style.textAlign = "center";
    button.style.lineHeight = "50px";
    button.style.cursor = "pointer";
    button.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.2)";
    document.body.appendChild(button);

    // Create a popup
    const popup = document.createElement("div");
    popup.style.position = "fixed";
    popup.style.bottom = "80px";
    popup.style.left = "20px";
    popup.style.width = "600px";
    popup.style.padding = "20px";
    popup.style.backgroundColor = "white";
    popup.style.border = "1px solid #ccc";
    popup.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.2)";
    popup.style.display = "none";
    popup.style.zIndex = "1000";
    document.body.appendChild(popup);

    // Left text area for input
    const inputArea = document.createElement("textarea");
    inputArea.style.width = "48%";
    inputArea.style.height = "150px";
    inputArea.style.marginRight = "2%";
    inputArea.style.float = "left";
    inputArea.placeholder = "Enter keywords here (one per line)...";
    popup.appendChild(inputArea);

    // Right area for frequency analysis
    const frequencyArea = document.createElement("div");
    frequencyArea.style.width = "48%";
    frequencyArea.style.height = "150px";
    frequencyArea.style.float = "right";
    frequencyArea.style.border = "1px solid #ccc";
    frequencyArea.style.overflowY = "auto";
    frequencyArea.style.padding = "5px";
    frequencyArea.style.backgroundColor = "#f9f9f9";
    popup.appendChild(frequencyArea);

    // Add button container
    const buttonContainer = document.createElement("div");
    buttonContainer.style.clear = "both";
    buttonContainer.style.margin = "10px 0";
    buttonContainer.style.display = "flex";
    buttonContainer.style.justifyContent = "space-between";
    popup.appendChild(buttonContainer);

    // Add buttons
    const analyzeButton = document.createElement("button");
    analyzeButton.textContent = "Analyze Frequency";
    buttonContainer.appendChild(analyzeButton);

    const generateButton = document.createElement("button");
    generateButton.textContent = "Generate +";
    buttonContainer.appendChild(generateButton);

    const copyButton = document.createElement("button");
    copyButton.textContent = "Copy";
    buttonContainer.appendChild(copyButton);

    const clearButton = document.createElement("button");
    clearButton.textContent = "Clear";
    buttonContainer.appendChild(clearButton);

    const closeButton = document.createElement("button");
    closeButton.textContent = "Close";
    buttonContainer.appendChild(closeButton);

    // Output box for generated content
    const outputArea = document.createElement("textarea");
    outputArea.style.width = "100%";
    outputArea.style.height = "80px";
    outputArea.style.marginTop = "10px";
    outputArea.style.backgroundColor = "#f9f9f9";
    outputArea.style.border = "1px solid #ccc";
    outputArea.readOnly = true;
    popup.appendChild(outputArea);

    // Show/hide popup
    button.addEventListener("click", () => {
        popup.style.display = popup.style.display === "none" ? "block" : "none";
    });

    // Analyze word frequency
    analyzeButton.addEventListener("click", () => {
        const text = inputArea.value;
        const words = text.split(/\s+/).filter(word => word && !excludedWords.includes(word.toLowerCase()) && !excludedSymbols.test(word));
        const frequency = words.reduce((freq, word) => {
            word = word.toLowerCase();
            freq[word] = (freq[word] || 0) + 1;
            return freq;
        }, {});

        // Populate frequency area
        frequencyArea.innerHTML = "";
        Object.keys(frequency)
            .sort((a, b) => frequency[b] - frequency[a])
            .forEach(word => {
                const checkbox = document.createElement("input");
                checkbox.type = "checkbox";
                checkbox.value = word;
                checkbox.style.marginRight = "5px";

                const label = document.createElement("label");
                label.textContent = `${word} (${frequency[word]})`;

                const div = document.createElement("div");
                div.appendChild(checkbox);
                div.appendChild(label);

                frequencyArea.appendChild(div);
            });
    });

    // Generate "+" keywords
    generateButton.addEventListener("click", () => {
        const selectedWords = Array.from(frequencyArea.querySelectorAll("input[type=checkbox]:checked")).map(input => input.value);
        outputArea.value = selectedWords.map(word => `+${word}`).join(" ");
    });

    // Copy to clipboard
    copyButton.addEventListener("click", () => {
        if (outputArea.value.trim() !== "") {
            GM_setClipboard(outputArea.value);
            alert("Copied to clipboard!");
        } else {
            alert("No content to copy!");
        }
    });

    // Clear all fields
    clearButton.addEventListener("click", () => {
        inputArea.value = "";
        frequencyArea.innerHTML = "";
        outputArea.value = "";
    });

    // Close popup
    closeButton.addEventListener("click", () => {
        popup.style.display = "none";
    });
})();